使用列表理解表达式时:
[x * 0.1 for x in range(0, 5)]
我希望得到这样的列表:
[0.0, 0.1, 0.2, 0.3, 0.4]
然而我却得到了这个:
[0.0, 0.1, 0.2, 0.30000000000000004, 0.4]
这背后的原因是什么?
几乎每种语言中的浮点数本质上都是不精确的
如果您需要精确的精度,请使用Decimal http://docs.python.org/2/library/decimal.html class
from decimal import Decimal
print Decimal("0.3")
如果您只需要它们看起来漂亮,只需在显示时使用格式字符串
例如:
"%0.2f"%2.030000000000034
如果你想比较它们使用一些阈值
if num1 - num2 < 1e-3 : print "Equal Enough For Me!"
**请参阅 abarnert 对阈值的评论...这是一个非常简化的示例,用于更深入地解释 epsilon 阈值,我在这里找到了一篇文章http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm
补充阅读:
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html(详细解释)
http://floating-point-gui.de/basic/ http://floating-point-gui.de/basic/(一般使用浮动的基本教程)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)