四舍五入到最接近的五


70

我需要将双精度取整到最接近的5。我找不到使用Math.Round函数执行此操作的方法。我怎样才能做到这一点?

我想要的是:

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

等等..

是否有捷径可寻?

Answers:



51

这有效:

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

5
+1是因为int优于十进制,并且在sebastiaan的示例中,需要强制转换,这将导致类似于您的示例的情况。所以你是完整的。
J. Random Coder 2009年

15

这是一个简单的程序,可让您验证代码。请注意MidpointRounding参数,如果没有它,您将舍入到最接近的偶数,在您的情况下,这意味着相差5(在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();
        }
    }


0

您还可以编写一个通用函数:

选项1-方法

public int Round(double i, int v)
{
    return (int)(Math.Round(i / v) * v);
}

并像这样使用它:

var value = Round(72, 5);

选项2-扩展方法 public static double Round(此double值,int roundTo)

{
    return (int)(Math.Round(value / roundTo) * roundTo);
}

并像这样使用它:

var price = 72.0;
var newPrice = price.Round(5);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.