具有负参数的Math.Round

时间:2012-08-20 19:43:53

标签: c# c++ rounding

ALL,

我正在尝试将Borland C ++代码转换为C#。 在旧代码中,我看到以下内容:

double a = RoundTo( b, -2 );

查看Borland文档,我看到RoundTo()接受正面和负面参数的精度。正数表示为10 ^ n,负数为10 ^ -n。

查看Math.RoundTo()的C#文档,我找不到引用是否接受负数的精度。并且所有样本都带有正数。

在这种情况下,转换代码的正确方法是什么?我应该忘记这个标志并写下:

double a = Math.Round( b, 2 );

谢谢。

3 个答案:

答案 0 :(得分:5)

我不知道你想要做的舍入类型的内置解决方案,但这并不意味着某个地方没有。一个快速的解决方案是创建一个方法甚至一个扩展方法来做你想要的:

double DoubleRound(double value, int digits)
{
    if (digits >= 0)
    {
        return Math.Round(value, digits);
    }
    else
    {
        digits = Math.Abs(digits);
        double temp = value / Math.Pow(10, digits);
        temp = Math.Round(temp, 0);
        return temp * Math.Pow(10, digits);
    }
}

答案 1 :(得分:4)

C#中的

Math.Round for doubles不能接受 digits 的负值(事实上,如果数字小于0或大于15,则会在该页面中记录抛出ArgumentOutOfRangeException)

参数是在Math.Round的情况下,而是要求一定数量的小数位,这意味着参数的符号将被反转,所以在你的情况下,是的,

double a = Math.Round( b, 2 );

将是RoundTo的正确翻译,带有-2参数。

答案 2 :(得分:2)

你尝试过吗?我做了并且有一个例外:

System.ArgumentOutOfRangeException: Rounding digits must be between 0 and 15, inclusive.
Parameter name: digits 
   at System.Math.Round(Double value, Int32 digits)
   at MyClass.RunSnippet()
   at MyClass.Main()