2009-10-07 17 views
48

Potrzebuję zaokrąglić podwójną do najbliższej piątki. Nie mogę znaleźć sposobu, aby to zrobić za pomocą funkcji Math.Round. Jak mogę to zrobić?Runda do najbliższej piątki

Czego chcę:

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

i tak dalej ..

Czy istnieje prosty sposób to zrobić?

Odpowiedz

96

Spróbuj:

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

Metoda ta powinna działać na dowolnej liczbie: Math.Round (wartość/n) * n (patrz tutaj: http://stackoverflow.com/questions/326476/vba-how-to-round-to- najbliższego-5-lub-10-lub-x) –

+2

ostrzeżenie: to byłoby prawdopodobnie "prawie zaokrąglone", ze względu na precyzję zmiennoprzecinkową ... – tbischel

37

To działa:

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

+1, ponieważ int jest lepsze niż dziesiętne, aw przykładzie sebastiaan trzeba rzucać spowodowałoby coś takiego jak twój przykład. więc twój jest kompletny. –

+0

+1 tak, to jest rzeczywiście lepsze. – user275587

9

Oto prosty program, który pozwala na sprawdzenie kodu. Pamiętaj o parametrze MidpointRounding, bez niego uzyskasz zaokrąglenie do najbliższej liczby parzystej, co w twoim przypadku oznacza różnicę pięciu (w przykładzie 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(); 
     } 
    } 
Powiązane problemy