2011-11-21 114 views
-1

为什么c不应该等于0.321?python中的浮点精度

>>> from math import ceil 
>>> a = 123.321 
>>> b = a % 60 
>>> b 
3.320999999999998 
>>> ceil(b) 
4.0 
>>> c = ceil(b) - b 
>>> c 
0.679000000000002 

更新:

对于任何人想知道我是如何得到我一直在寻找的价值:

>>> c = b - floor(b) 
+3

只需点击“浮点”标签就可以找到答案。无论哪种语言......理由总是相同。投票结束。 http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – spender

+4

这不是浮点精度问题,但简单的数学...'4 - 3.32'等于'0.68'。尝试使用计算器代替。 – Constantinius

+0

对不起,我真的不知道我在哪里出错了。 –

回答

6

你会在五分钟左右捂脸:P

ceil(b)是4.0
b是3.320999999999998

所以ceil(b)-b应该是4.0 - 3.320999999999998。试着把它放在你的计算器中,你会明白为什么c不等于0.321。

如果你想让c等于.321,你应该做b - floor(b)。

2

嗯,因为4 - 3.321是.679?至少是我在三年级的时候。