python 2.7中数字的总和是不正确的

时间:2016-03-17 12:00:59

标签: python-2.7

在python 2.7中,我按给定的顺序添加下面的数字(因为我得到的,这些数据来自db的顺序相同)

24.73 + 1 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 + 0.33 +。 33 + 0.33 + 0.33 + 0.33 + 0.33 + 8  求和结果为39.99999999999997 但实际答案是40

任何建议都会有所帮助。提前谢谢

1 个答案:

答案 0 :(得分:1)

来自Python documentation on floats

  

请注意,这是二进制浮点的本质:这是   不是Python中的错误也不是代码中的错误。你会   在支持你的所有语言中看到同样的东西   硬件的浮点运算(虽然有些语言可能没有   默认情况下或在所有输出模式下显示差异。)

所以,这就是浮点数的工作方式。要获得您期望的结果,请尝试使用decimal module

>>> 24.73+1+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+8
39.99999999999997
>>> s = "24.73+1+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+.33+8"
>>> sum([Decimal(x) for x in s.split('+')])
Decimal('40.00')