C#中四舍五入的问题
Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。
C# 中没有四舍五入函数,事实上我知道的程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法 Banker 's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的。
下面的这段代码能实现严格的四舍五入:
public static double Round(double num, int prec) { bool isNegative = false; //如果是负数 if (num < 0) { isNegative = true; num = -num; } int IValue = 1; for (int i = 1; i <= prec; i++) { IValue = IValue * 10; } double Int = Math.Round(num * IValue + 0.5, 0); num = Int / IValue; if (isNegative) { num = -num; } return num; }
本文参考了http://www.cnblogs.com/sunney/archive/2010/07/28/1786903.html
本文作者:拓荒者IT
本文链接:https://www.cnblogs.com/youring2/archive/2013/01/30/2882470.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
📌做了个微信公众号【拓荒者IT】,分享各种技术干货,新内容首发到公众号,欢迎关注❤️
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步