Arrondir les entiers au multiple le plus proche de 10
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 comme:
£140 - £200
Comme il semble beaucoup plus propre
Des idées sur la façon dont je peux y parvenir?
5 réponses
Je voudrais juste créer quelques 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;
}
Module nous donne le reste, dans le cas de l'arrondi 10 - r
vous emmène au dixième le plus proche, pour arrondir vous soustrayez simplement R. assez simple.
Vous n'avez pas besoin d'utiliser module (%) ou virgule flottante...
Cela fonctionne:
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 le plus proche de 10:
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
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;
Une méthode générale pour arrondir un nombre à un multiple d'un autre nombre, arrondi 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 lancer (num + step / 2) dans un int, mais cela a donné de mauvais résultats pour les flotteurs négatifs ((int) -12.0000 = -11
et autres). Quoi qu'il en soit, ce sont quelques cas que j'ai testés:
- tout nombre arrondi à l'étape 1 devrait être lui-même
- -3 arrondi à l'étape 2 = -4
- -2 arrondi à l'étape 2 = -2
- 3 arrondi à l'étape 2 = 4
- 2 arrondi à l'étape 2 = 2
- -2,3 arrondi à l'échelon 0,2 = -2,4
- -2,4 arrondi à l'échelon 0,2 = -2,4
- 2,3 arrondi à l'échelon 0,2 = 2,4
- 2,4 arrondi à l'échelon 0,2 = 2,4