[小技巧]你真的了解C#中的Math.Round么?
2021-01-19 19:14
标签:了解 就是 var 统计学 大数 原则 结果 重载 logs
今天在某.NET Core 群中看到有人在问 开发者为了实现小数点后 2 位的四舍五入,编写了如下代码, 代码非常的简单,开发者实际得到的结果是12.12, 这与其所预期的四舍五入结果12.13相悖。 其实产生这个结果的原因是由于 所谓的四舍六入五成双,就是说当确定有效位数之后,有效位数的下一位如果小于等于4就舍去,如果大于等于6就进一,当有效位数的下一位是5的时候 从统计学上将,四舍六入五成双比四舍五入要更精确,因为大量计算的情况下,四舍五入逢五进一,会导致结果偏向大数。 例如: 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 由此可见四舍六入五成双原则得到的结果更为精确。 那么如何使用 其实C#中的 这两个方法都提供了第三个参数 所以如果我们希望的到一个理想中四舍五入的结果,,我们可以改用如下代码: [小技巧]你真的了解C#中的Math.Round么? 标签:了解 就是 var 统计学 大数 原则 结果 重载 logs 原文地址:https://www.cnblogs.com/lonelyxmas/p/12154158.htmlMath.Round
的问题。其实这个问题之前有很多人遇到了,在此总结一下。var num = Math.Round(12.125, 2);
Math.Round
默认使用的并非是四舍五入的原则,而是四舍六入五成双的原则。四舍六入五成双#
Math.Round的四舍五入#
Math.Round
实现预期的四舍五入呢?Math.Round
提供了非常多的重载方法,其中有两个重载方法是,public static double Round (double value, int digits, MidpointRounding mode);
public static decimal Round (decimal d, int decimals, MidpointRounding mode);
mode
, mode
是一个MidpointRounding
的枚举变量,它有2个可选值
var num = Math.Round(12.125, 2, MidpointRounding.AwayFromZero);
上一篇:二、webdriver API
文章标题:[小技巧]你真的了解C#中的Math.Round么?
文章链接:http://soscw.com/index.php/essay/44198.html