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?

Antworten:



51

Das funktioniert:

5* (int)Math.Round(p / 5.0)

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();
        }
    }

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.


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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.