13929986267
首页  > 客户服务  > 知识共享

软件保留小数位遵循“银行家算法”,即:四舍六入五取偶

来源:销售管理软件 发布时间:2019-09-02 浏览:144

最近有软件用户反映,当使用多于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。

版权所有 © 2011-2019 佛山好的科技有限公司 未经许可不得复制、转载或摘编,违者必究!
Copyright © 2011-2019 FOSHAN HAODE TECHNOLOGY CO., LTD. All Rights Reserved.
ICP许可证号 粤ICP备17126558号-1  粤公网安备 44060402000368号