作者:多盟乄丶 | 来源:互联网 | 2023-05-18 08:23
最近在公司的项目上遇到这样一个问题,商品的支付金额在各种奇葩的满减之后会产生三位小数。之前对于金钱统一处理的函数是保留两位小数末位四舍五入,但是最后计算的金额发现和后台有1分钱的误差,经过排查之后发现
最近在公司的项目上遇到这样一个问题,商品的支付金额在各种奇葩的满减之后会产生三位小数。之前对于金钱统一处理的函数是保留两位小数末位四舍五入,但是最后计算的金额发现和后台有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