软件保留小数位遵循“银行家算法”,即:四舍六入五取偶
来源:销售管理软件 发布时间:2019-09-02 浏览:6091最近有软件用户反映,当使用多于2位小数单价的、以及等于2位小数金额的时候,就会出现金额少了一分钱两分钱的情况。对于这个现象,我们程序员工程师给大家解析是:软件保留小数位遵循“银行家算法”,即:四舍六入五取偶。 这是什么?下面找了一些资料给大家:
引入资料: 可能很多人都跟我一样,都知道Math.Round()是C#中用来做四舍五入,保留指定小数位的。但实际上它并不是真正的四舍五入,而是银行家算法的四舍六入五取偶,事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法。其规则如下:
1、当舍去位的数值小于5时:直接舍去
2、当舍去位的数值大于6时:进位加1
3、当舍去位的数值等于5时,分两种情况:
(1)若5后面有其他非0数字(即5不是最后一位)时,进位加1。
(2)若5后面只有0(即5是最后一位)时,则根据5的前一位的奇偶来判断,前一位为奇数则进位加1,为偶数则舍去。
遇到5需要舍去的情况只有一种,即5是最后一位有效数且前一位数是偶数。数字的精度越大,则这个算法就越像真正的四舍五入。
我们使用这个函数时,用来处理的数字通常是那些有n位小数的数字,而我们用于显示的通常也就只有2-4位,所以这也就不容易发现这个问题
可能光是文字大家不好理解,下面写几个例子:
Math.Round(1.14 , 1) //结果:1.1
Math.Round(1.25 , 1) //结果:1.2 五是最后一位且前一位为偶数,也舍去
Math.Round(1.15 , 1) //结果:1.2 五是最后一位但前一位为奇数,进位加一
Math.Round(1.16 , 1) //结果:1.2
我公司旗下的百惠软件保留小数位的规则就是基于这套方法。
本文章的引用图片和文字资料来源于互联网,如果有侵权请联系我们修改和删除。联系QQ 82930208。