2009-10-07 1 views
48

Мне нужно округлить до пяти ближайших пяти. Я не могу найти способ сделать это с помощью функции Math.Round. Как я могу это сделать?Раунд до ближайших пяти

Что я хочу:

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

и так далее ..

Есть простой способ сделать это?

ответ

96

Try:

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

Этот метод должен работать для любого числа: Math.Round (значение/п) * п (см здесь: http://stackoverflow.com/questions/326476/vba-how-to-round-to- ближайший-5-или-10-или-x) –

+2

предупреждение: это, вероятно, будет «почти округлено» из-за точности с плавающей запятой ... – tbischel

37

Это работает:

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

+1, потому что int лучше десятичного, а в примере sebastiaan нужно отбросить приведет к чему-то вроде вашего примера. так что ваш является полным. –

+0

+1 да, это действительно лучше. – user275587

9

Вот простая программа, которая позволяет проверить код. Помните о параметре MidpointRounding, без него вы получите округление до ближайшего четного числа, что в вашем случае означает разницу в пять (в примере 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(); 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^