# Number
# 常见问题
# 0.1 + 0.2 !== 0.3
Number 使用64位表示一个数字,基本结构如下:
0 10...0010 1001...00
// 第一部分: 1位 符号位
// 第二部分:11位 指数位
// 第三部分: 52位 有效数字位 (尾数)
1
2
3
4
5
2
3
4
5
计算机计算时需要转换位二进制进行计算,转换完毕后,两个小数会无限循环
0.1 => 0.00011001100...
0.2 => 0.00110011001...
1
2
2
超过52位有效数字的尾数会被丢弃
# 怎么解决
- 将数字转成整数
Math.abs(arg1 - arg2) < Number.EPSILON
使用误差逻辑- 使用三方库