2009-10-07 7 views
48

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

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?

Antwort

96

Versuchen:

Math.Round(value/5.0) * 5; 
+4

Diese Methode sollte für eine beliebige Anzahl arbeiten: * Math.Round (Wert/n) n (siehe hier: http://stackoverflow.com/questions/326476/vba-how-to-round-to- Nearest-5-or-10-or-x) –

+2

Warnung: Dies wäre wahrscheinlich "fast abgerundet", aufgrund der Fließkomma-Genauigkeit ... – tbischel

37

Dies funktioniert:

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

+1 weil int ist besser als dezimal und in Sebastiaans Beispiel muss man was zu werfen würde zu etwas wie dein Beispiel führen. so ist dein das komplette. –

+0

+1 yep es ist in der Tat besser. – user275587

9

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

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