浅析计算表达式Round四舍五入不正确问题原创
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),满足五后非零就进一的条件即可。
推荐阅读