一个关于四舍五入的坑

最近在公司的项目上遇到这样一个问题,商品的支付金额在各种奇葩的满减之后会产生三位小数。之前对于金钱统一处理的函数是保留两位小数末位四舍五入,但是最后计算的金额发现和后台有1分钱的误差,经过排查之后发现这个问题来自toFixed()。

在控制台打印测试

console.log(1350.135.toFixed(2))  // 1350.13
console.log(1350.125.toFixed(2)) // 1350.13

可以发现toFixed()并不是简单的四舍五入

经过搜索发现准确的说toFixed()应该是四舍六入,而5的情况很复杂。

和后台小伙伴调试很久发现后台的四舍六入和toFixed()仍然不一致

解决方法前后台统一使用四舍五入,前端计算可以使用Math.round(num*100)/100

posted @ 2018-07-25 11:26  立立青青  阅读(623)  评论(0)    收藏  举报