Python中的浮点加法

cpx*_*cpx 2 python floating-point

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

>>> 1.0 + 2.3
3.3
>>> 1.1 + 2.2
3.3000000000000003
Run Code Online (Sandbox Code Playgroud)

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

Gam*_*iac 7

引用文档:

不幸的是,大多数小数部分不能完全表示为二进制分数.结果是,通常,您输入的十进制浮点数仅由实际存储在机器中的二进制浮点数近似.

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

>>> 1.1 + 1.1
2.2
>>> 1.1 + 2.3
3.4
>>> 1.1 + 2.2
3.3000000000000003
Run Code Online (Sandbox Code Playgroud)

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

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17
Run Code Online (Sandbox Code Playgroud)

使用Python的decimal类会给你更好的结果.

  • 我给了你 +1,但 `numpy` 在这里不是一个好的解决方案。`numpy` 仍然使用二进制浮点数。`decimal` 库将在这里提供一个精确的解决方案,因为 `decimal` 对十进制值进行精确操作。 (2认同)