2011-06-05 35 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

相关问题