js中数值精度丢失

110 阅读1分钟

精度丢失场景

超过最值

  • 场景
    • response返回number类型id(12345678901234567890),但前端展示(12345678901234567000)
  • 原因
    • JavaScript 使用 IEEE 754 浮点数表示法,其有效数字位数是 53 位,超过这个范围的整数会导致精度丢失。
    • 在 JavaScript 中,超过 -9007199254740991 (-(2^53-1))9007199254740991(2^53-1) 范围的整数将无法被精确表示。当你传递一个超出这个范围的整数给前端,JavaScript 会尝试近似表示,这就会导致精度丢失或者四舍五入的情况。

浮点数的计算

  • 场景
    • 0.1+0.2 = 0.30000000000000004
  • 原因
    • 在计算机有限的存储空间中,二进制无法准确的表示十进制的某些小数。

解决方案

githubstart中文文档
decimal.jsgithub.com/MikeMcl/dec…5.7klixingwu.gitee.io/decimal.js_…
bignumber.jsgithub.com/MikeMcl/big…6.3k
big.jsgithub.com/MikeMcl/big…4.5k
math.sjgithub.com/josdejong/m…13.4k

参考

juejin.cn/post/726420…

juejin.cn/post/726658…