全,
我正在尝试将Borland C++代码转换为C#。在旧代码中,我看到了以下内容:
double a = RoundTo( b, -2 );查看Borland文档,我发现RoundTo()同时接受正负参数以提高精度。正数表示舍入到10^n,负数表示舍入到10^n。
查看Math.RoundTo()的C#文档,我找不到它是否接受负数以提高精度的引用。并且所有样本都以正数表示。
在这种情况下,转换代码的正确方式是什么?我是不是应该忘了这个牌子,写下:
double a = Math.Round( b, 2 );谢谢。
发布于 2012-08-21 03:49:56
C#中的Math.Round for doubles不能接受数字的负值(事实上,如果数字小于0或大于15,就会抛出ArgumentOutOfRangeException )
在Math.Round的情况下,参数要求一定数量的小数位数,这意味着参数的符号将颠倒,所以在您的情况下,是的,
double a = Math.Round( b, 2 );将是带有-2参数的RoundTo的正确转换。
发布于 2012-08-21 04:19:04
我不知道你想要做的舍入类型的内置解决方案,但这并不意味着在某个地方没有一个。一个快速的解决方案是创建一个方法,甚至是一个扩展方法来完成您要做的事情:
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);
}
}https://stackoverflow.com/questions/12044072
复制相似问题