0.1加0.2,电脑为什么不一定得到0.3?

0.1加0.2,电脑为什么不一定得到0.3?

在数学里,0.1加0.2恰好是0.3。但在 Python 的普通浮点数计算中,结果常显示为0.30000000000000004,直接拿它与0.3比较还会得到“不相等”。这不是加法规则出了错,而是输入在存储时已经变成了近似值。

电脑常用的浮点数以二进制分数表示数值。十进制的0.1在二进制里需要无限循环的数字,有限存储空间只能选一个很接近它的值。0.2和0.3也分别被近似;相加后再次舍入,得到的存储值可能与直接输入0.3所得的存储值不同。日常显示又常把长数字缩短,于是有时看起来相等,精确比较却不相等。

这里要分清三个层次:数学中的数值、机器中的有限表示、屏幕上的显示。普通测量可以按适当误差范围比较;需要精确十进制金额时,应使用专门的十进制或整数表示。这是表示方式的限制,不是所有电脑计算都不可靠。

资料:https://docs.python.org/3/tutorial/floatingpoint.html


了解 Geoffrey Chen 的更多信息

订阅后即可通过电子邮件收到最新文章。