python 浮点数算不准的问题

计算结果不符合预期, 如

print(94 * .01)
结果为:
0.9400000000000001

有没有方法自动的规避这种问题?
(对于上面问题可以用 round(94 * .01, 2)解决, 但是有没有默认能算的准的自动的方法)

阅读 5.2k
2 个回答

不止Python有这个问题。。。

这个不是python的问题,是浮点数误差,计算机本身就存在这个问题,搜索引擎很多解释.
我们要明确,哪怕除了这个,误差是肯定存在的,尤其是涉及到除法除不尽的时候,所以我们只能接受误差,并控制在合理范围内.

避免浮点数误差的办法,可以避免使用浮点数,比如将浮点数表示为分数形式.当然我不知道这是不是真的有效,不过在这里起码是有效了.

In [1]: 94*1/float(100)
Out[1]: 0.94

实际上这个思路就是全部转化成整数,最后在输出为浮点数而已,对这个比较敏感的一般就是涉及财务的系统,大家的方案好像也都差不太多.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题