C# 数学。用负参数取整
全部, 我试图把Borland C++代码转换成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,
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
都默认进行银行家四舍五入,因此无需担心。