为什么 0.1 + 0.2 不等于 0.3 ?
原因
计算机中所有的数据都是以二进制存储的,浮点数也不例外。在计算机中,浮点数由三个部分组成:符号位、指数位和尾数位。其中,尾数位表示的是有效数字,指数位表示的是小数点的位置。
在十进制中,0.1 和 0.2 可以表示为:
0.1 = 1 * 2^-4
0.2 = 1 * 2^-3
在二进制中,0.1 和 0.2 可以表示为:
python
0.1 = 0.0001100110011001100110011001100110011001100110011001101...
0.2 = 0.001100110011001100110011001100110011001100110011001101...
由于计算机中的浮点数是有限的,所以 0.1 和 0.2 在计算机中的表示也是有限的。当我们将 0.1 和 0.2 相加时,计算机会将它们转换为二进制,然后进行加法运算,最后再将结果转换回十进制。由于二进制表示的有限性,所以 0.1 + 0.2 的结果并不是精确的 0.3,而是接近 0.3 的一个数。
解决方案
- 使用四舍五入的方法,将结果保留到一定的小数位数。
- 使用浮点数的精度控制函数,如 Python 中的
round()
函数。 - 使用定点数表示法,即将小数点固定在某个位置,然后进行运算。