热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

一个关于四舍五入的坑

最近在公司的项目上遇到这样一个问题,商品的支付金额在各种奇葩的满减之后会产生三位小数。之前对于金钱统一处理的函数是保留两位小数末位四舍五入,但是最后计算的金额发现和后台有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


推荐阅读
author-avatar
多盟乄丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有