2009-10-07 8 views
48

Je dois arrondir un double au plus proche de cinq. Je ne peux pas trouver un moyen de le faire avec la fonction Math.Round. Comment puis-je faire ceci?Arrondir au plus proche cinq

Ce que je veux:

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

et ainsi de suite ..

est-il un moyen facile de le faire?

Répondre

96

Essayez:

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

Cette méthode devrait fonctionner pour un nombre quelconque: Math.Round (valeur/n) * n (voir ici: http://stackoverflow.com/questions/326476/vba-how-to-round-to- le plus proche-5-ou-10-ou-x) –

+2

avertissement: ceci serait probablement "presque arrondi", en raison de la précision en virgule flottante ... – tbischel

37

Cela fonctionne:

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

+1 parce que int est meilleur que la décimale et dans l'exemple de sebastiaan il faut jeter quel résulterait en quelque chose comme votre exemple. donc le tien est le complet. –

+0

+1 oui c'est mieux en effet. – user275587

9

Voici un programme simple qui vous permet de vérifier le code. Soyez conscient du paramètre MidpointRounding, sans cela vous arrondissez au nombre pair le plus proche, ce qui dans votre cas signifie une différence de cinq (dans l'exemple 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(); 
     } 
    }