J'essaie de comprendre comment arrondir les prix - dans les deux sens. Par exemple:
Round down
43 becomes 40
143 becomes 140
1433 becomes 1430
Round up
43 becomes 50
143 becomes 150
1433 becomes 1440
J'ai la situation où j'ai une fourchette de prix de dire:
£143 - £193
dont je veux montrer que:
£140 - £200
comme il a l'air beaucoup plus propre
Des idées sur la façon dont je peux y arriver?
Je voudrais juste créer un couple de méthodes;
int RoundUp(int toRound)
{
if (toRound % 10 == 0) return toRound;
return (10 - toRound % 10) + toRound;
}
int RoundDown(int toRound)
{
return toRound - toRound % 10;
}
Modulus nous donne le reste. En cas d'arrondi, 10 - r
vous amène au dixième le plus proche, pour arrondir à la soustraction, il suffit de soustraire r. Assez simple.
Vous n'avez pas besoin d'utiliser le module (%) ou la virgule flottante ...
Cela marche:
public static int RoundUp(int value)
{
return 10*((value + 9)/10);
}
public static int RoundDown(int value)
{
return 10*(value/10);
}
Ce code arrondit au multiple de 10 le plus proche:
int RoundNum(int num)
{
int rem = num % 10;
return rem >= 5 ? (num - rem + 10) : (num - rem);
}
Utilisation très simple:
Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
Une méthode générale pour arrondir un nombre à un multiple d'un autre, en arrondissant loin de zéro .
Pour entier
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step / 2)) / step) * step;
else
return ((num - (step / 2)) / step) * step;
}
Pour float
float RoundNum(float num, float step)
{
if (num >= 0)
return floor((num + step / 2) / step) * step;
else
return ceil((num - step / 2) / step) * step;
}
Je sais que certaines parties peuvent sembler contre-intuitives ou pas très optimisées. J'ai essayé de transtyper (num + step/2) sur un int, mais cela donnait des résultats erronés pour les flottants négatifs ((int) -12.0000 = -11
et autres). Quoi qu'il en soit, voici quelques cas que j'ai testés:
Divisez le nombre par 10.
number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down
Puis multipliez par 10.
number = number * 10;
public static int Round(int n)
{
// Smaller multiple
int a = (n / 10) * 10;
// Larger multiple
int b = a + 10;
// Return of closest of two
return (n - a > b - n) ? b : a;
}