浮点数陷阱
在 JS 中对浮点数 toFixed 四舍五入会陷阱
.105 .toFixed(2); // => "0.10"
.104 .toFixed(2); // => "0.10"
.106 .toFixed(2); // => "0.11"
这里好似是 五舍六入
其实是精度问题
.105 .toPrecision(18); // => "0.104999999999999996"
安全数
JS 的 Number 类型是一个 64位双精度浮点数类型,
第 1 位表示 符号
2 - 13 位表示 子数位
- 2**11 == 2048
- 子数范围是 -1024 至 1024
- 所以物理上最大的数是
- 2*10231.9999999999999998
- Number.MAX_VALUE
- Number.MIN_VALUE
后面 52 位 小数位
安全数是在这个范围内精度是正确的,超过之后是不准
Number.MAX_SAFE_INTEGER
Number.MIN_SAFE_INTEGER