首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python float - str - float怪异

Python float - str - float怪异
EN

Stack Overflow用户
提问于 2009-11-22 18:28:18
回答 4查看 7.1K关注 0票数 11
代码语言:javascript
复制
>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???

这里发生什么事情?如何将0.47000000000000003转换为字符串,并将结果值转换回float?

我在Windows上使用Python 2.5.4。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-22 18:35:48

str(0.47000000000000003) '0.47'float('0.47')可以是0.46999999999999997。这是由于浮点数的表示方式(请参阅这篇wikipedia文章)。

注意:float(repr(0.47000000000000003))eval(repr(0.47000000000000003))会给你预期的结果,但如果你需要精度,你应该使用Decimal

票数 16
EN

Stack Overflow用户

发布于 2009-11-22 18:34:46

float (和double)没有无限的精度。当您对它们进行操作时,自然会出现舍入误差。

票数 3
EN

Stack Overflow用户

发布于 2009-11-22 19:41:21

这是一个Python FAQ

同样的问题也出现在quite regularly in comp.lang.python上。

我认为这是一个常见问题,因为python在所有其他方面都很完美;-),我们希望它能完美地执行算术-就像我们在学校里学到的一样。然而,正如任何学过数值方法课程的人都会告诉你的那样,浮点数离完美还有很长的路要走。

Decimal是一个很好的选择,如果你想要更快的速度和更多的选择,gmpy也很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1778368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档