2009-10-07 11 views
48

Necesito redondear un doble a los cinco más cercanos. No puedo encontrar una manera de hacerlo con la función Math.Round. ¿Cómo puedo hacer esto?Redondea a los cinco más cercanos

lo que quiero:

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

y así sucesivamente ..

¿Hay una manera fácil de hacer esto?

Respuesta

96

Probar:

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

Este método debería funcionar para cualquier número: Math.Round (valor/n) * n (ver aquí: http://stackoverflow.com/questions/326476/vba-how-to-round-to- más cercano-5-o-10-o-x) –

+2

advertencia: es probable que sea "casi redondeado", debido a la precisión del punto flotante ... – tbischel

37

Esto funciona:

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

+1 porque int es mejor que el decimal y en el ejemplo de Sebastián uno debe emitir qué daría como resultado algo como tu ejemplo. entonces el tuyo es el completo. –

+0

+1 sí, de hecho es mejor. – user275587

9

Aquí es un sencillo programa que le permite verificar el código. Tenga en cuenta el parámetro MidpointRounding, sin él obtendrá el redondeo al número par más cercano, que en su caso significa una diferencia de cinco (en el ejemplo 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(); 
     } 
    } 
Cuestiones relacionadas