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获得的相同结果的表示,这里的限制是什么?
		
		
- 这是一个艰难的阅读,但这将帮助您了解正在发生的事情:docs.oracle.com/cd/e19957-01/806-3568/ncg_goldberg.html
 
- 浮点数通常不是小数的精确表示,而是近似值。要获得十进制数字的精确表示,请参见docs.python.org/2/library/decimal.html
 
- @詹森帕斯克:我想说,这是推荐阅读任何人都能在5公里,所以代表和怀疑这一点。
 
 
	  
引用文档:
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类可以获得更好的结果。
		
		
- 或十进制模块
 
- 我给了你+1,但在这里,numpy不是一个好的解决方案。numpy仍然使用二进制浮点数。decimal库将在这里提供一个精确的解决方案,因为decimal精确地操作十进制值。
 
- 我认为python通常只使用iee754,而numpy也可能使用。你能举个例子吗?也许你在想,例如,sympy.mpmath。
 
- +1用于0.1 + 0.1 + 0.1 - 0.3。
 
- @Steveha@Benjamin你们说得对。这是我的错误,我以为努比更精确,但事实证明并非完全正确。decimal更精确,但也不是那么精确。
 
- 好吧,numpy确实提供了几种浮点数,包括float64甚至float96。所以可以说它更精确。但任何二进制浮点表示都不能精确表示某些小数部分,如0.1。(0.5当然很容易用二进制浮点格式)换一种说法:你已经知道你不能用任何有限长度的十进制来表示1/7;不管你写了多少个十进制,你永远不会到达小数的末尾。好吧,二进制分数对一些十进制数字也有同样的问题。