踩坑:0.1+0.2≠0.3 与「金额用浮点」——前端后端谁来扛?
现象
金额展示差一分钱;汇总与明细对不上;接口 JSONnumber传递大额分。
根因
IEEE-754 二进制浮点无法精确表示十进制小数;金额若用 double 运算会累积误差。
常见踩坑
- 全链路元 float加减乘除后再四舍五入。
- 以为
toFixed能修复一切(顺序错了照样漂移)。
解决
- **整数分(厘)**long/bigint 运算,仅在展示层格式化。
- 或用decimal 库(Java
BigDecimal、PythonDecimal、JSdecimal.js等)。 - JSON 对外字符串金额或与前端契约最小货币单位整数。
总结
金额要么整数最小单位,要么十进制库,不要让 float 管钱。
