Java 为什么我用Android';什么是爪哇?
所以我在做一些非常简单的事情。我有两个实例变量,newX和newY。这两个都是初始化为0.0的双精度 在更新循环期间,我执行以下计算:Java 为什么我用Android';什么是爪哇?,java,android,double,Java,Android,Double,所以我在做一些非常简单的事情。我有两个实例变量,newX和newY。这两个都是初始化为0.0的双精度 在更新循环期间,我执行以下计算: long now = System.currentTimeMillis(); double elapsed = (now - mNextTime)/1000.0; // convert to seconds Log.i("nx", newX + " + " + elapsed + " = " + (newX + elapsed)); newX = newX +
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??我很困惑。注意E9。你看到的是非常大的数字 1E9=100000000 所以
1.30733173811609962E9+0.058=1307317381.21899623java中的浮点数问题?。。。smashing mag在这里写了一篇关于javascript相关问题的文章:同样的问题也适用于java,尽管我不认为这是你的答案。我只是想指出一下,如果这样做会发生什么:
double testNewX=newX+appeased;Log.i(testNewX)我刚刚意识到我在做什么!谢谢你。mLastTime初始化为0,完全把我搞砸了。简单的错误,谢谢@Matthew mNextTime==0?