Java: что-то теряется при применении + = - PullRequest
0 голосов
/ 27 октября 2018

Это мой код, но его вывод имеет какой-то смысл.

long currentTime;
long stateStartTime;
int delta;
float speed;

// I do something

System.out.println();
System.out.println(currentTime);
System.out.println(stateStartTime);
System.out.println(delta);
System.out.println(speed);
System.out.println(delta * speed);
System.out.println(currentTime - (stateStartTime + (delta * speed)));
stateStartTime += delta * speed;
System.out.println(currentTime - stateStartTime);

Вывод:

1350065634345877
1350065121656832
1
5.0E8
5.0E8
0.0
-24181867

Я ожидал, что последние две строки будут:

12689045
12689045

Но на удивление я получил вышеуказанный результат.Почему?

1 Ответ

0 голосов
/ 27 октября 2018

Не теряйте точность и ожидайте, что компьютер создаст ее заново.

long currentTime = 1350065634345877L;
long stateStartTime = 1350065121656832L;
long delta = 1L;
double speed = 5.0E8;

И ваши последние две строки (без других изменений) выдают

1.2689045E7
12689045

Чтобы предпоследняя строка совпадала с последней, вы можете использовать BigDecimal как

System.out.println(new BigDecimal(currentTime - (stateStartTime + (delta * speed)))
        .toPlainString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...