温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中Math.Round的作用是什么

发布时间:2021-07-08 13:48:38 来源:亿速云 阅读:434 作者:Leah 栏目:大数据

C#中Math.Round的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


开发者为了实现小数点后 2 位的四舍五入,编写了如下代码,

var num = Math.Round(12.125, 2);

代码非常的简单,开发者实际得到的结果是 12.12, 这与其所预期的四舍五入结果 12.13 相悖。

其实产生这个结果的原因是由于Math.Round 默认使用的并非是四舍五入的原则,而是四舍六入五成双的原则。

四舍六入五成双

所谓的四舍六入五成双,就是说当确定有效位数之后,有效位数的下一位如果小于等于 4 就舍去,如果大于等于 6 就进一,当有效位数的下一位是 5 的时候

  • 如果 5 前面为奇数,就舍五进一
  • 如果 5 前面为偶数,就舍五不进(0 是偶数)

从统计学上讲,四舍六入五成双比四舍五入要更精确,因为大量计算的情况下,四舍五入逢五进一,会导致结果偏向大数。

例如:

1.15+1.25+1.35+1.45 = 5.2

如果有效位数是小数点后一位,使用四舍五入原则得到的结果

1.2 + 1.3 + 1.4 + 1.5 = 5.4

而使用四舍六入五成双原则得到的结果是

1.2 + 1.2 + 1.4 + 1.4 = 5.2

由此可见四舍六入五成双原则得到的结果更为精确。

Math.Round 的四舍五入

那么如何使用Math.Round实现预期的四舍五入呢?

其实 C#中的Math.Round提供了非常多的重载方法,其中有两个重载方法是,

public static double Round (double value,
   int digits,
   MidpointRounding mode);
public static decimal Round (decimal d,
   int decimals,
   MidpointRounding mode);

这两个方法都提供了第三个参数modemode是一个MidpointRounding的枚举变量,它有 2 个可选值

  • AwayFromZero - 四舍五入
  • ToEven - 四舍六入五成双

所以如果我们希望得到一个理想中四舍五入的结果,我们可以改用如下代码:

var num = Math.Round(12.125, 2,
   MidpointRounding.AwayFromZero);

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI