踩坑:0.1+0.2≠0.3 与「金额用浮点」——前端后端谁来扛?

踩坑:0.1+0.2≠0.3 与「金额用浮点」——前端后端谁来扛?

现象

金额展示差一分钱;汇总与明细对不上;接口 JSONnumber传递大额分。

根因

IEEE-754 二进制浮点无法精确表示十进制小数;金额若用 double 运算会累积误差。

常见踩坑

  • 全链路元 float加减乘除后再四舍五入。
  • 以为toFixed能修复一切(顺序错了照样漂移)。

解决

  • **整数分(厘)**long/bigint 运算,仅在展示层格式化。
  • 或用decimal 库(JavaBigDecimal、PythonDecimal、JSdecimal.js等)。
  • JSON 对外字符串金额或与前端契约最小货币单位整数

总结

金额要么整数最小单位,要么十进制库,不要让 float 管钱。