2008-10-30 1 views
8

У меня есть меню товарных брендов, которое я хочу разделить на 4 столбца. Поэтому, если у меня есть 39 брендов, то я хочу, чтобы максимальное количество элементов для каждого столбца было равным 10 (с одним пробелом в последнем столбце). Вот как я вычисляю количество элементов для столбца (используя C#):Целочисленная математика в C#

int ItemCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(BrandCount)/4m)); 

Все, что преобразование кажется действительно некрасиво мне есть ли лучший способ сделать математику на целых в C#

ответ

21

Вы можете бросить:.?.

int ItemCount = (int) Math.Ceiling((decimal)BrandCount/4m); 

Кроме того, поскольку int/decimal приводит к decimal вы можете удалить один из слепков:

int ItemCount = (int) Math.Ceiling(BrandCount/4m); 
+0

Это было то, что я собирался написать. +1. – OregonGhost 2008-10-30 13:41:21

+0

Это то, что я закончил писать. :) +1. – 2008-10-30 13:41:56

+0

Ничего себе, это настолько чище. Благодарю. – 2008-10-30 13:49:52

7

более длинная альтернатива с Mod

ItemCount = BrandCount/4; 
if (BrandCount%4 > 0) ItemCount++; 
+2

дольше? Simpler! +1 – Treb 2008-10-30 13:45:36

2

Возможно попробовать что-то вроде этого ... Если предположить, BrandCount целое. Вы по-прежнему имеют те же забросы, но это может быть яснее:

int ItemCount = (int)(Math.Ceiling(BrandCount/4m)); 

Я не большой поклонник Convert класса, и я избегаю его всякий раз, когда это возможно. Кажется, что мой код нечеткий.

10

Почему вы даже используете десятичный знак?

int ItemCount = (BrandCount+3)/4; 

+3 убеждается округлить вверх, а не вниз:

(37+3)/4 == 40/4 == 10 
(38+3)/4 == 41/4 == 10 
(39+3)/4 == 42/4 == 10 
(40+3)/4 == 43/4 == 10 

В общем:

public uint DivUp(uint num, uint denom) 
{ 
    return (num + denom - 1)/denom; 
}