2009-10-07 44 views
48

Tôi cần phải làm tròn gấp đôi đến năm gần nhất. Tôi không thể tìm ra cách để thực hiện nó với hàm Math.Round. Tôi có thể làm cái này như thế nào?Vòng quanh năm gần nhất

Những gì tôi muốn:

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

và vân vân ..

Có một cách dễ dàng để làm được điều này?

Trả lời

96

Hãy thử:

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

Phương pháp này sẽ hoạt động với bất kỳ số nào: Math.Round (value/n) * n (xem tại đây: http://stackoverflow.com/questions/326476/vba-how-to-round-to- gần nhất-5-hoặc-10-hoặc-x) –

+2

cảnh báo: điều này có thể sẽ "gần như tròn", do độ chính xác nổi ... – tbischel

37

này hoạt động:

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

+1 vì int là tốt hơn thập phân và trong ví dụ của sebastiaan cần đúc sẽ dẫn đến một cái gì đó giống như ví dụ của bạn. vì vậy bạn là người hoàn chỉnh. –

+0

+1 yep nó thực sự là tốt hơn. – user275587

9

Đây là một chương trình đơn giản cho phép bạn xác minh mã. Hãy nhận biết tham số MidpointRounding, không có nó, bạn sẽ nhận được làm tròn đến số chẵn gần nhất, trong trường hợp của bạn có nghĩa là sự khác biệt của năm (trong ví dụ 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(); 
     } 
    } 
Các vấn đề liên quan