所有,
我试图将Borland C++代码转换为C#.在旧代码中,我看到以下内容:
double a = RoundTo( b, -2 );
Run Code Online (Sandbox Code Playgroud)
看看Borland文档,我看到RoundTo()接受正面和负面参数的精度.正数表示为10 ^ n,负数为10 ^ -n.
看看Math.RoundTo()的C#文档,我找不到它是否会接受负数来表示精度的参考.并且所有样本都带有正数.
在这种情况下转换代码的正确方法是什么?我应该忘记这个标志并写下:
double a = Math.Round( b, 2 );
Run Code Online (Sandbox Code Playgroud)
谢谢.
C# 中双精度数的 Math.Round不能接受数字的负值(事实上,该页面记录了如果数字小于 0 或大于 15,则抛出 ArgumentOutOfRangeException)
该参数在 Math.Round 的情况下,而不是要求一定数量的小数位,这意味着参数的符号将被反转,所以在你的情况下,是的,
double a = Math.Round( b, 2 );
Run Code Online (Sandbox Code Playgroud)
将是带有 -2 参数的 RoundTo 的正确翻译。
我不知道你想要做的舍入类型的内置解决方案,但这并不意味着没有某个地方.一个快速的解决方案是创建一个方法甚至扩展方法来做你想要的:
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);
}
}
Run Code Online (Sandbox Code Playgroud)