浅析计算表达式Round四舍五入不正确问题原创
金蝶云社区-唯心230731
唯心230731
61人赞赏了该文章 691次浏览 未经作者许可,禁止转载编辑于2023年02月22日 09:19:43

问题:计算定义公式的值并填写到指定列round( 430* 0.4095, 2),算出来的结果是176.08,而不是想象中的176.09


原因:Math.Round采用的是国际通行的是 Banker 舍入法(银行家舍入),即四舍六入五取偶。银行家舍入是IEEE规定的小数舍入标准之一,也是IEEE目前规定中最优秀的舍入方法,因此所有符合 IEEE 标准的语言都应该实现这种算法。这个算法可以概括为:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。

举例分析下:

round(176.084,2)//返回176.08(四舍)

round(176.086,2)//返回176.09(六入)

round(176.0851,2)//返回176.09(五后非零就进一)

round(176.085,2)//返回176.08(五后皆零看奇偶,五前为偶应舍去)

round(176.075,2)//返回176.08(五后皆零看奇偶,五前为奇要进一)


推荐解决方法:在四舍五入前先加上0.0000001,即round( 430* 0.4095+0.0000001, 2),满足五后非零就进一的条件即可。

赞 61