#java #android #double
#java #Android #двойной
Вопрос:
Итак, я делаю что-то очень простое. У меня есть две переменные экземпляра, 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 elapsed;
newY = newY elapsed;
Вот несколько итераций инструкции logging, это то, что я не могу объяснить:
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?? Я очень смущен.
Комментарии:
1. Проблемы с числами с плавающей запятой в Java?… smashing mag опубликовал статью о проблемах, связанных с javascript, здесь: smashingmagazine.com/2011/05/30 / … та же проблема будет применяться в java, хотя я не думаю, что это ваш ответ. Просто хотел указать на это.
2. Что произойдет, если вы сделаете:
double testNewX = newX elapsed; Log.i( testNewX );
Ответ №1:
Обратите внимание на E9. Вы смотрите на очень большие числа.
1E9 = 1,000,000,000
итак
1.3073173811609962E9 0.058 = 1,307,317,381.21899623
Комментарии:
1. Я только что понял, что я делал! Спасибо за это. mLastTime инициализировался на 0, полностью облажавшись со мной. Простая ошибка, спасибо!
2. @Matthew возможно, mNextTime == 0?