我有一個相當簡單的表達式,我想要評估哪一個是ZoomLevel = ZoomLevel - 0.1,其中ZoomLevel被聲明爲double。爲什麼1.2 - 0.1在C#中變成1.09?
我稱例程多次:
- 1.5 - 0.1 = 1.4
- 1.4 - 0.1 = 1.3
- 1.3 - 0.1 = 1.2
然後是時間執行ZoomLevel等於1.2時的相同語句:
Then我跨過聲明:
爲什麼這種說法評估爲1.09,而不是1.1?
(我猜它有事情做與在執行雙精度不夠。)
編輯:這是我得到之前和語句執行後打印縮放級別的內容時。
?string.Format("{0:N20}", ZoomLevel);
"1,20000000000000000000"
?string.Format("{0:N20}", ZoomLevel);
"1,09000000000000000000"
不錯的猜測http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems – Steve
我在SO上隨機挑選了一篇文章,當時投票結果爲重複。做一個搜索,它被一遍又一遍地回答。 –
你能展示'ZoomLevel'的實現嗎? –