为了账号安全,请及时绑定邮箱和手机立即绑定

python float-str-浮点怪异

python float-str-浮点怪异

倚天杖 2019-10-21 15:18:53
>>> float(str(0.65000000000000002))0.65000000000000002>>> float(str(0.47000000000000003))0.46999999999999997     ???这里发生了什么?如何转换0.47000000000000003为字符串并将结果值转换为浮点数?我在Windows上使用Python 2.5.4。
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

str(0.47000000000000003)给予'0.47'并且float('0.47')可以0.46999999999999997。这是由于表示浮点数的方式(请参阅此Wikipedia文章)


注意:float(repr(0.47000000000000003))或eval(repr(0.47000000000000003))会给您预期的结果,但是如果需要精度,则应使用Decimal。


查看完整回答
反对 回复 2019-10-21
?
森栏

TA贡献1810条经验 获得超5个赞

这是Python常见问题解答


同样的问题也经常在comp.lang.python中出现。


我认为它之所以成为FAQ,是因为python在所有其他方面都是完美的;-),我们希望它能够完美地执行算术-就像我们在学校教书一样。但是,正如完成了数值方法课程的任何人都会告诉您的那样,浮点数离完美还很遥远。


十进制是一个很好的选择,如果您想提高速度和更多选择,gmpy也很好。


查看完整回答
反对 回复 2019-10-21
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

通过这个例子,我认为这是Python中的错误


    >>> print(int(((48/5.0)-9)*5))

    2

简单的方法,我以此解决这个问题


    >>> print(int(round(((48/5.0)-9)*5,2)))

    3


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 576 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信