# 精度丢失问题

精度丢失问题不应该算是 js,或者某一个语言的问题,其本质问题是十进制小数无法用二进制精确的表示

# js

# java

# 数据库计算

# 方案

我们项目中多数的处理是方法是保存一定位数的小数位,就是这么简单

# 问题 1

js 保存小数位不用说 toFixed,看下图凉凉

其实记得曾经很早在天猫上就看到过显示的价格,比我实际付款的价格少了 1 分钱的问题 bug

其实这个很好解决,要么重写 toFixed,要么用一些第三方金额库

# 问题 2

在前端计算的过程中如果我们四舍五入之后再进行计算可能会出现误差,哪怕是几分的误差一旦牵扯到钱都是天大的问题(虽然实际前端只做展示计算,实际应用的数值还是由后台计算的)

  1. 说服产品
  2. 先进行计算再进行四舍五入
  3. 后台计算好之后返回

# 注意

金额数字是一个很值得敬畏的东西,在项目架构之初我们都要好好考虑到这些,比方还有一些大金额科学计数法问题,等等。。。