浅析计算表达式Round四舍五入不正确问题

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

浅析计算表达式Round四舍五入不正确问题

问题:计算定义公式的值并填写到指定列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),满足五后非零就进一的条件即可。

浅析计算表达式Round四舍五入不正确问题

问题:计算定义公式的值并填写到指定列round( 430* 0.4095, 2),算出来的结果是176.08,而不是想象中的176.09原因:Math.Round采用的是...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息