首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有负参数的Math.Round

带有负参数的Math.Round
EN

Stack Overflow用户
提问于 2012-08-21 03:43:53
回答 2查看 6.8K关注 0票数 8

全,

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

代码语言:javascript
运行
复制
double a = RoundTo( b, -2 );

查看Borland文档,我发现RoundTo()同时接受正负参数以提高精度。正数表示舍入到10^n,负数表示舍入到10^n。

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

在这种情况下,转换代码的正确方式是什么?我是不是应该忘了这个牌子,写下:

代码语言:javascript
运行
复制
double a = Math.Round( b, 2 );

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-21 03:49:56

C#中的Math.Round for doubles不能接受数字的负值(事实上,如果数字小于0或大于15,就会抛出ArgumentOutOfRangeException )

在Math.Round的情况下,参数要求一定数量的小数位数,这意味着参数的符号将颠倒,所以在您的情况下,是的,

代码语言:javascript
运行
复制
double a = Math.Round( b, 2 );

将是带有-2参数的RoundTo的正确转换。

票数 4
EN

Stack Overflow用户

发布于 2012-08-21 04:19:04

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

代码语言:javascript
运行
复制
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);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12044072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档