Python float - str - float怪异
问题描述:
>>> float(str(0.65000000000000002))
0.65000000000000002
>>> float(str(0.47000000000000003))
0.46999999999999997 ???
这是怎么回事? 如何将0.47000000000000003
转换为字符串并将结果值恢复为浮点型?Python float - str - float怪异
我在Windows上使用Python 2.5.4。
答
float(和double)不具有无限精度。当然,在对它们进行操作时会发生舍入错误。
答
这是一个Python FAQ
同样的问题出现quite regularly in comp.lang.python也。
我认为这是一个常见问题的原因是,因为python在所有其他方面都是完美的;我们期望它完美地执行算术 - 就像我们在学校教过的一样。然而,任何已经完成数值方法课程的人都会告诉你,浮点数与完美的距离很远。
答
通过这个例子 我认为当你devide
>>> print(int(((48/5.0)-9)*5))
2
简单的方法,这是在Python中的错误,我这个
>>> print(int(round(((48/5.0)-9)*5,2)))
3
解决这个问题,加入IEEE-754标签 – 2009-11-22 10:45:56
RC:我认为许多人(是的,程序员也)不知道IEEE 754定义了浮点数(不是每个人都阅读语言规范:-))。所以我实际上认为“浮点”标签将是一个更好的选择,除非有关标准本身的具体问题。 – Joey 2009-11-22 11:01:31
当然,那些提出这些问题的人不知道ieee-754是什么...... – sth 2009-11-22 11:30:26