所以我正在做一些非常簡單的事情。我有兩個實例變量,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 ??我很困惑。
浮點數的問題...砸星等做了利用JavaScript這裏有關問題的文章:HTTP:/ /www.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/同樣的問題將適用於java,但我不認爲這是你的答案。只是想指出來。 – Jason 2011-06-05 23:52:04
如果你這樣做會發生什麼:'double testNewX = newX + elapsed; Log.i(testNewX);' – Jason 2011-06-05 23:54:18