webentwicklung-frage-antwort-db.com.de

Runden von ganzen Zahlen auf das nächste Vielfache von 10

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?

27
dhardy

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.

57
evanmcdonnal

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);
}
14
Matthew Watson

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
10
PaRiMaL RaJ

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:

  • jede auf Schritt 1 gerundete Zahl sollte selbst sein
  • -3 gerundet auf Schritt 2 = -4
  • -2 gerundet auf Schritt 2 = -2
  • 3 auf Schritt 2 = 4 gerundet
  • 2 auf Schritt 2 = 2 gerundet
  • -2,3 gerundet auf Schritt 0.2 = -2.4
  • -2,4 gerundet auf Schritt 0.2 = -2.4
  • 2,3 auf Schritt 0.2 gerundet = 2.4
  • 2,4 auf Schritt 0,2 gerundet = 2,4
4
Chris Maes

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;
4
Sharun
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;
        }
0
Liakat