梗概:
- 有些有限的十进制小数用二进制是无限循环的
- 如0.1用二进制表示就是无限循环的
- 用有限位存储无限位, 就造成了精度丢失
精度丢失导致的问题:
1. 接受的小数与预期不相等
1.1. 解决方案:
- 四舍五入凑整, 这样就可以掩盖极小的误差了
- 如js的[use::toFixed()]
2. 小数运算结果与预期不相等
- 计算机判断想等是严格想等, 即使误差非常小
2.1. 实例:
0.1+0.2==0.3//false
2.2. 解决方案:
使用成熟的第三方库来处理, 如js的math.js和BigDecimal.js