2011-11-21 108 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?至少是我在三年級的時候。