有人能解释一下:0.2 + 0.1 = 0.30000000000000004吗?
重复内容:
浮点数是怎么存储的?什么时候需要注意?
为什么在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