Ich versuche herauszufinden, wie man Preise rundet - in beide Richtungen. Zum Beispiel:
Round down
43 becomes 40
143 becomes 140
1433 becomes 1430
Round up
43 becomes 50
143 becomes 150
1433 becomes 1440
Ich habe die Situation, wo ich eine Preisspanne von sagen kann:
£143 - £193
davon möchte ich zeigen als:
£140 - £200
da sieht es viel sauberer aus
Irgendwelche Ideen, wie ich das erreichen kann?
Ich würde nur ein paar Methoden erstellen;
int RoundUp(int toRound)
{
if (toRound % 10 == 0) return toRound;
return (10 - toRound % 10) + toRound;
}
int RoundDown(int toRound)
{
return toRound - toRound % 10;
}
Der Modul gibt uns den Rest, im Falle der Aufrundung von 10 - r
gelangen Sie zum nächsten Zehntel, um abzurunden, indem Sie einfach r abziehen. Ziemlich einfach.
Sie müssen keinen Modulus (%) oder Gleitkommazahl verwenden ...
Das funktioniert:
public static int RoundUp(int value)
{
return 10*((value + 9)/10);
}
public static int RoundDown(int value)
{
return 10*(value/10);
}
Dieser Code wird auf das nächste Vielfache von 10 gerundet:
int RoundNum(int num)
{
int rem = num % 10;
return rem >= 5 ? (num - rem + 10) : (num - rem);
}
Sehr einfache Anwendung:
Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
Eine allgemeine Methode zum Runden einer Zahl auf ein Vielfaches einer anderen Zahl, Runden von weg von Null .
Für ganze Zahl
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step / 2)) / step) * step;
else
return ((num - (step / 2)) / step) * step;
}
Für 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;
}
Ich weiß, dass einige Teile möglicherweise nicht intuitiv erscheinen oder nicht sehr optimiert sind. Ich habe versucht, (int + step/2) in ein int zu gießen, aber dies führte zu negativen Ergebnissen für negative Floats ((int) -12.0000 = -11
und so). Jedenfalls sind dies einige Fälle, die ich getestet habe:
Teilen Sie die Zahl durch 10.
number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down
Dann mit 10 multiplizieren.
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;
}