Python舍入问题

poc*_*coa 1 python math floating-point

>>> num = 4.123456
>>> round(num, 3) # expecting 4.123
4.1230000000000002
Run Code Online (Sandbox Code Playgroud)

结果我期待4.123,我错了吗?

pto*_*ato 7

这不是一个错误.你需要阅读科学家应该知道的关于浮点运算的每一台计算机:

http://docs.sun.com/source/806-3568/ncg_goldberg.html


Mik*_*ham 6

是的,您的期望与您工具的设计意图不符.

查看Python教程的这一部分.


使用math.round实际上非常罕见.如果你试图将数字显示为某个精度的字符串,你可能想要更像的东西

>>> num = 4.123456
>>> print "%.3f" % num
4.123
Run Code Online (Sandbox Code Playgroud)

您可能对有关字符串格式的文档感兴趣.

  • @pocoa,`4.1230000000000002`有什么问题?如果你认为`decimal.Decimal`就是答案,你很可能不会很好地理解这种情况. (4认同)