2011-06-05 65 views
0

所以我正在做一些非常簡單的事情。我有兩個實例變量,newX和newY。這些都是雙打初始化爲0.0。爲什麼我使用Android的Java獲得這個總數的奇怪結果?

在更新過程中循環我執行此計算:

long now = System.currentTimeMillis(); 
double elapsed = (now - mNextTime)/1000.0; // convert to seconds 
Log.i("nx", newX + " + " + elapsed + " = " + (newX + elapsed)); 
newX = newX + elapsed; 
newY = newY + elapsed; 

這裏有記錄語句幾次迭代,這是我無法解釋:

1.3073173811609962E9 + 0.058 = 1.3073173812189963E9 
1.3073173812189963E9 + 0.112 = 1.3073173813309963E9 
1.3073173813309963E9 + 0.02 = 1.3073173813509963E9 
1.3073173813509963E9 + 0.018 = 1.3073173813689961E9 
1.3073173813689961E9 + 0.018 = 1.307317381386996E9 
1.307317381386996E9 + 0.101 = 1.307317381487996E9 

爲什麼1.307 + 0.112 = 1.307 ??我很困惑。

+0

浮點數的問題...砸星等做了利用JavaScript這裏有關問題的文章:HTTP:/ /www.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/同樣的問題將適用於java,但我不認爲這是你的答案。只是想指出來。 – Jason 2011-06-05 23:52:04

+0

如果你這樣做會發生什麼:'double testNewX = newX + elapsed; Log.i(testNewX);' – Jason 2011-06-05 23:54:18

回答

7

注意E9。你正在看非常大的數字。 ?在Java

1E9 = 1,000,000,000

所以

1.3073173811609962E9 + 0.058 = 1,307,317,381.21899623

+0

該死的,你是對的,我想知道我是如何在那裏結束的。我不應該 – 2011-06-05 23:51:34

+0

我剛剛意識到我在做什麼!感謝那。 mLastTime正在初始化爲0,完全搞砸了我。簡單的錯誤,謝謝! – 2011-06-05 23:52:51

+0

@Matthew也許mNextTime == 0? – Aleadam 2011-06-05 23:53:40

相關問題