Pregunta

Tengo un menú de marcas de productos que quiero dividir en 4 columnas. Entonces, si tengo 39 marcas, quiero que el recuento máximo de elementos para cada columna sea 10 (con un solo espacio en la última columna. Así es como estoy calculando el recuento de artículos para una columna (usando C #):

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

Toda esa conversión me parece realmente fea. ¿Hay una mejor manera de hacer matemáticas en enteros en C #?

¿Fue útil?

Solución

Puedes lanzar:

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

También, dado que int / decimal da como resultado un decimal , puedes eliminar uno de los lanzamientos:

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

Otros consejos

¿Por qué estás usando un decimal?

int ItemCount = (BrandCount+3)/4;

El +3 se asegura de redondear hacia arriba en lugar de hacia abajo:

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

En general:

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

Una alternativa más larga con Mod.

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

Tal vez intente algo como esto ... Suponiendo que BrandCount es un número entero. Aún tiene los mismos modelos, pero podría ser más claro:

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

No soy un gran fanático de la clase Convert , y lo evito siempre que es posible. Siempre parece hacer que mi código sea ilegible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top