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 #?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top