说说为什么0.1+0.2!==0.3
# 是什么
0.1 + 0.2 === 0.3 // false
- 为什么
1 / 3 = 0.3333333.....,无限循环,无法存储,在计算机里是采用存储一个相似值,然后再取出来的时候就会出现精度丢失问题
# 浮点数
- 在js中采取双精度浮点编码,双精度 = 整数 + 小数
- 科学计数法
27.0 = 11011.0
科学计数表示:
# 原理
// 0.1 和 0.2 都转化成二进制后再进行运算
0.00011001100110011001100110011001100110011001100110011010 +
0.0011001100110011001100110011001100110011001100110011010 =
0.0100110011001100110011001100110011001100110011001100111
// 转成十进制正好是 0.30000000000000004
# 计算流程
- 把数字转换成十进制
- 十进制转换成二进制
- 二进制存储,部分浮点数会进行四舍五入(0舍1入)
- 计算时取出就会出现精度误差
- 存储时有位数限制(64位)
上次更新: 2021/12/19, 18:05:42