精度丢失场景
超过最值
- 场景
- 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
- 原因
- 在计算机有限的存储空间中,二进制无法准确的表示十进制的某些小数。
解决方案
| github | start | 中文文档 | |
|---|---|---|---|
| decimal.js | github.com/MikeMcl/dec… | 5.7k | lixingwu.gitee.io/decimal.js_… |
| bignumber.js | github.com/MikeMcl/big… | 6.3k | |
| big.js | github.com/MikeMcl/big… | 4.5k | |
| math.sj | github.com/josdejong/m… | 13.4k |