可能重复:
Python float - str - float weirdness为什么在Python中划分2/5.0时出现错误?
在蟒蛇,2/5.0
或2/float(5)
回报0.40000000000000002
为什么我得到这个错误在最后,我怎样才能得到正确的值用于额外的计算?
可能重复:
Python float - str - float weirdness为什么在Python中划分2/5.0时出现错误?
在蟒蛇,2/5.0
或2/float(5)
回报0.40000000000000002
为什么我得到这个错误在最后,我怎样才能得到正确的值用于额外的计算?
欢迎使用IEEE754,enjoy your stay。
改为使用decimal
。
查看this question的解释。正确的做法是要么
由于浮点运算不准确。您应该在您的额外计算中使用此值,并在完成后对结果进行四舍五入。如果您确切需要,请使用其他数据类型。
Ignacio上面有正确的答案。
IEEE标准有效地将浮点数存储到二进制计算机中。这些细节非常详细地介绍了数字的存储方式,几乎所有计算机都遵循这些规则。
他们也是错的。二进制数字不能处理大多数正常数字,只是两个幂。这些标准并没有做一些棘手的事情,而是要求重新计算底部位数来实现四舍五入或其他技巧,这些标准选择了效率。
这样,您可以诅咒您的系统运行速度稍快。偶尔有关于以某种方式改变Python以解决这些问题的争论,但是如果没有效率的巨大损失,答案也不是微不足道的。
四处逛逛此:
一种选择是挖掘到标准库的“十进制”包。如果你坚持这些例子,并忽略长页面,它会得到你想要的。没有效率的赌注。
其次是做一个手动舍入和字符串截断自己在一个输出函数。如果你从不打印这些数字,那么谁会关心这个数字是否有点偏离?
使用'decimal'确实**没有解决这个问题。十进制数字不能再比二进制浮点数字表示所有的有理数。只需从2/5更改示例并将其替换2/3即可。 – 2010-02-12 19:29:46
请注意,Python 3.1有一个新的浮点格式化函数,可以避免这种外观。有关更多详细信息,请参见What's new in Python 3.1(搜索“浮点”)。
为了您的细读:*每个计算机科学家应该知道的关于浮点算术* http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-02-12 09:52:31
python教程解释:http:// docs。 python.org/tutorial/floatingpoint.html – nosklo 2010-02-12 10:43:47
重复的DOZENS问题。请搜索。所有这些:http://stackoverflow.com/search?q=[python]+floating+point。具体来说这个:http:// stackoverflow。com/questions/1778368/python-float-str-float-weirdness – 2010-02-12 11:36:23