Entier maths en c #
Question
J'ai un menu de marques de produits que je souhaite répartir sur 4 colonnes. Donc, si j'ai 39 marques, je souhaite que le nombre maximal d'éléments pour chaque colonne soit égal à 10 (avec un seul espace dans la dernière colonne. Voici comment je calcule le nombre d'éléments pour une colonne (à l'aide de C #):
int ItemCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(BrandCount) / 4m));
Toute cette conversion me semble vraiment moche. Existe-t-il un meilleur moyen de faire des maths sur des entiers en C #?
La solution
Vous pouvez lancer:
int ItemCount = (int) Math.Ceiling( (decimal)BrandCount / 4m );
De plus, parce que int
/ décimal
donne un décimal
, vous pouvez supprimer l'un des conversions:
int ItemCount = (int) Math.Ceiling( BrandCount / 4m );
Autres conseils
Pourquoi utilisez-vous même une décimale?
int ItemCount = (BrandCount+3)/4;
Le +3
permet d’arrondir plutôt que de descendre:
(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 général:
public uint DivUp(uint num, uint denom)
{
return (num + denom - 1) / denom;
}
Une alternative plus longue avec Mod.
ItemCount = BrandCount / 4;
if (BrandCount%4 > 0) ItemCount++;
Essayez peut-être quelque chose comme ça ... En supposant que BrandCount
est un entier. Vous avez toujours les mêmes distributions, mais cela pourrait être plus clair:
int ItemCount = (int)(Math.Ceiling(BrandCount / 4m));
Je ne suis pas un grand fan de la classe Convert
et je l'évite autant que possible. Cela semble toujours rendre mon code illisible.