2021-07-31
0.1+0.2 == 0.3
运行结果:False
image.png
对于十进制,10的质因子有2和5 ,所以十进制中的1/2, 1/4, 1/5, 1/8, 1/10都可以精确表示。而1/3,1/6,1/7就会表示成循环小数。因为分母是质因子3,6,7
对于二进制,质因子就只有2. 所以二进制只能精确表示1/2, 1/4, 1/8, 等分数
因为Python在计算前会将我们输入的十进制数字转换为二进制,计算后,然后将二进制的结果又转换为十进制数字显示出来。
所以,十进制能精确表示的1/10和1/5,到了计算机运行环境的二进制中,1/5就变成了循环小数。
所以我们认知中的十进制上的0.1+0.2 = 0.3, 但是二进制中的0.1+0.2结果是一个循环小数。
当python以二进制运算完,再转会十进制并输出时,会做断尾处理,得到0.300000000004. 真正情况可能小数点后位数更多。
不同的编程语言中,0.1+0.2 结果都不同。JS中也得到一个循环小数。
解决方法
另外需要注意
round
image.png