C# 数学。用负参数取整

C# 数学。用负参数取整,c#,c++,rounding,C#,C++,Rounding,全部, 我试图把Borland C++代码转换成C语言。 在旧代码中,我看到以下内容: double a = RoundTo( b, -2 ); 查看Borland文档,我发现RoundTo()接受精度的正参数和负参数。正表示四舍五入到10^n,负表示四舍五入到10^n 查看Math.RoundTo()的C#文档,我找不到它是否接受精度为负数的参考。所有样本都用正数表示 在这种情况下,转换代码的正确方法是什么?我是否应该忘记这个标志,写下: double a = Math.Round( b,

全部,

我试图把Borland C++代码转换成C语言。 在旧代码中,我看到以下内容:

double a = RoundTo( b, -2 );
查看Borland文档,我发现RoundTo()接受精度的正参数和负参数。正表示四舍五入到10^n,负表示四舍五入到10^n

查看Math.RoundTo()的C#文档,我找不到它是否接受精度为负数的参考。所有样本都用正数表示

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

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

在C#中,不能接受数字的负值(事实上,如果数字小于0或大于15,则在该页面中记录抛出ArgumentOutOfRangeException)

参数是在数学中的。取而代之,取而代之的是要求一定数量的小数位数,这意味着参数的符号会反转,所以在你的例子中,是的

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

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

您尝试过吗?我做到了,但有一个例外:

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() System.ArgumentOutOfRangeException:舍入位数必须介于0和15之间(含0和15)。 参数名称:数字 at System.Math.Round(双值,Int32位) 在MyClass.RunSnippet()中
在MyClass.Main()中,我不知道有一个内置的解决方案可以解决您希望执行的舍入类型,但这并不意味着在某个地方没有。一个快速的解决方案是创建一个方法,甚至是一个扩展方法来完成您正在寻找的任务:

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);
    }
}

作为一个小提示,Borland
RoundTo
和C#
Round
都默认进行银行家四舍五入,因此无需担心。