matemática inteiro em c #
Pergunta
Eu tenho um menu de marcas de produtos que eu quero dividir por 4 colunas. Então, se eu tenho 39 marcas, então eu quero a contagem de itens máxima para cada coluna a ser 10 (com uma única lacuna na última coluna Aqui está como eu estou calculando a contagem de itens para uma coluna (usando C #):.
int ItemCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(BrandCount) / 4m));
Tudo que a conversão parece realmente feio para mim. Existe uma maneira melhor de fazer matemática em números inteiros em C #?
Solução
Você pode lançar:
int ItemCount = (int) Math.Ceiling( (decimal)BrandCount / 4m );
Além disso, devido int
/ decimal
resulta em uma decimal
você pode remover um dos elencos:
int ItemCount = (int) Math.Ceiling( BrandCount / 4m );
Outras dicas
Por que você está mesmo usando um decimal?
int ItemCount = (BrandCount+3)/4;
O +3
faz se você arredondar para cima em vez de para baixo:
(37+3)/4 == 40/4 == 10
(38+3)/4 == 41/4 == 10
(39+3)/4 == 42/4 == 10
(40+3)/4 == 43/4 == 10
Em geral:
public uint DivUp(uint num, uint denom)
{
return (num + denom - 1) / denom;
}
A mais alternativa com Mod.
ItemCount = BrandCount / 4;
if (BrandCount%4 > 0) ItemCount++;
Talvez tentar algo como isto ... Supondo BrandCount
é um inteiro. Você ainda tem os mesmos moldes, mas poderia ser mais claro:
int ItemCount = (int)(Math.Ceiling(BrandCount / 4m));
Eu não sou um grande fã da classe Convert
, e eu evitá-lo sempre que possível. Parece sempre fazer o meu código ilegível.