有人能解释一下:0.2 + 0.1 = 0.30000000000000004吗?

42 投票
2 回答
55315 浏览
提问于 2025-04-17 03:02

重复内容:
浮点数是怎么存储的?什么时候需要注意?

浮点数运算有问题吗?

为什么在Python解释器中会出现以下情况?

>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.1+0.1
0.2
>>> 0.2+0.1
0.30000000000000004
>>> 0.3-0.3
0.0
>>> 0.2+0.1
0.30000000000000004
>>> 

为什么 0.2 + 0.1 = 0.3 不成立?

2 个回答

17

并不是所有的浮点数在有限的计算机上都能被准确表示。比如0.1和0.2在二进制浮点数中都无法准确表示,0.3也是如此。

一个数字能被准确表示的条件是它可以写成a/b的形式,其中a和b是整数,并且b是2的幂。显然,数据类型还需要有足够大的有效数字来存储这个数字。

我推荐你去看看Rob Kennedy的有用网页,这是一个很好的工具,可以帮助你了解哪些数字可以被准确表示。

35

这是因为 .1 在计算机的二进制浮点表示中无法被准确表示。如果你尝试这样做:

>>> .1

Python 会显示 .1,因为它只会打印到一定的精度,但实际上已经存在一个小的舍入误差。.3 也是一样,不过当你执行:

>>> .2 + .1
0.30000000000000004

时,.2.1 的舍入误差会累积起来。另外请注意:

>>> .2 + .1 == .3
False

撰写回答