Runde auf die nächsten fünf

70

Ich muss ein Doppel auf die nächsten fünf runden. Ich kann mit der Math.Round-Funktion keinen Weg finden, dies zu tun. Wie kann ich das machen?

Was ich will:

70 = 70
73.5 = 75
72 = 70
75.9 = 75
69 = 70

und so weiter..

Gibt es eine einfache Möglichkeit, dies zu tun?

Martin
quelle

Antworten:

126

Versuchen:

Math.Round(value / 5.0) * 5;
Sebastiaan M.
quelle
4
Diese Methode sollte für eine beliebige Zahl funktionieren: Math.Round (Wert / n) * n (siehe hier: stackoverflow.com/questions/326476/… )
TK.
2
Warnung: Dies wäre wahrscheinlich "fast gerundet", aufgrund der Gleitkommapräzision ...
tbischel
51

Das funktioniert:

5* (int)Math.Round(p / 5.0)
Mike Polen
quelle
5
+1, weil int besser als dezimal ist und in Sebastiaans Beispiel muss ein Cast ausgeführt werden, was zu so etwas wie Ihrem Beispiel führen würde. deins ist also das komplette.
J. Random Coder
15

Hier ist ein einfaches Programm, mit dem Sie den Code überprüfen können. Beachten Sie den Parameter MidpointRounding. Ohne diesen Parameter wird auf die nächste gerade Zahl gerundet, was in Ihrem Fall eine Differenz von fünf bedeutet (im Beispiel 72.5).

    class Program
    {
        public static void RoundToFive()
        {
            Console.WriteLine(R(71));
            Console.WriteLine(R(72.5));  //70 or 75?  depends on midpoint rounding
            Console.WriteLine(R(73.5));
            Console.WriteLine(R(75));
        }

        public static double R(double x)
        {
            return Math.Round(x/5, MidpointRounding.AwayFromZero)*5;
        }

        static void Main(string[] args)
        {
            RoundToFive();
        }
    }
Max Galkin
quelle
1

Ich habe das so gemacht:

int test = 5 * (value / 5); 

Für den nächsten Wert (Schritt 5) oben fügen Sie einfach 5 hinzu.

Albert Swinkels
quelle
0

Sie können auch eine generische Funktion schreiben:

Option 1 - Methode

public int Round(double i, int v)
{
    return (int)(Math.Round(i / v) * v);
}

Und benutze es wie:

var value = Round(72, 5);

Option 2 - Erweiterungsmethode public static double Round (dieser doppelte Wert, int roundTo)

{
    return (int)(Math.Round(value / roundTo) * roundTo);
}

Und benutze es wie:

var price = 72.0;
var newPrice = price.Round(5);
Jonne Kleijer
quelle