# Number

# 常见问题

# 0.1 + 0.2 !== 0.3

Number 使用64位表示一个数字,基本结构如下:

0 10...0010 1001...00

// 第一部分: 1位 符号位
// 第二部分:11位 指数位
// 第三部分: 52位 有效数字位 (尾数)
1
2
3
4
5

计算机计算时需要转换位二进制进行计算,转换完毕后,两个小数会无限循环

0.1 => 0.00011001100...
0.2 => 0.00110011001...
1
2

超过52位有效数字的尾数会被丢弃

# 怎么解决

  • 将数字转成整数
  • Math.abs(arg1 - arg2) < Number.EPSILON 使用误差逻辑
  • 使用三方库