python中的浮点加法

Floating point addition in Python

本问题已经有最佳答案,请猛点这里访问。

为什么Python中的后一种情况不产生3.3的结果?

1
2
3
4
>>> 1.0 + 2.3
3.3
>>> 1.1 + 2.2
3.3000000000000003

这对我来说似乎没有任何意义。对于您通过1.0 + 2.3而不是通过1.1 + 2.2获得的相同结果的表示,这里的限制是什么?


引用文档:

Unfortunately, most decimal fractions cannot be represented exactly as binary fractions. A consequence is that, in general, the decimal floating-point numbers you enter are only approximated by the binary floating-point numbers actually stored in the machine.

你偶然发现的是许多特性之一:

1
2
3
4
5
6
>>> 1.1 + 1.1
2.2
>>> 1.1 + 2.3
3.4
>>> 1.1 + 2.2
3.3000000000000003

事实上,这是一个罕见的事件,我很难找到其他事件。这是另一个奇怪的例子:

1
2
>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

使用python的decimal类可以获得更好的结果。