所以我正在做一些非常简单的事情。我有两个实例变量,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