2009-10-07 56 views
48

En yakın beşe iki katını tamamlamam gerekiyor. Math.Round işleviyle bunu yapmanın bir yolunu bulamıyorum. Bunu nasıl yapabilirim?Yuvarlama en yakın beş

Benim istediğim:

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

ve benzeri ..

Bunu yapmanın kolay bir yolu var mı?

cevap

96

Dene:

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

Bu yöntem herhangi bir sayıda çalışması gerekir: http://stackoverflow.com/questions/326476/vba-how-to-round-to-: Math.Round (değer/n) * n (bkz: burada en yakın-5-veya-10-veya-x) –

+2

uyarı: kayan nokta hassasiyeti nedeniyle bu muhtemelen "neredeyse yuvarlanmış" olacaktır ... – tbischel

37

Bu çalışır: Burada

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

+1, çünkü ondalıktan daha iyidir ve sebastiaan örneğinde bir örneğiniz gibi bir şeyle sonuçlanır. yani seninki tam senin. –

+0

+1 evet gerçekten daha iyi. – user275587

9

kodu doğrulamak olanak tanıyan basit bir programdır. MidpointRounding parametresinin farkında olun, onsuz en yakın sayıya yuvarlanırsınız, bu durumda sizin için beş fark demektir (72.5 örneğinde).

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(); 
     } 
    } 
İlgili konular