猿问

Java:应用 += 时会丢失一些东西

这是我的代码,但它的输出确实有意义。


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

但令人惊讶的是我得到了上述结果。为什么?


慕田峪9158850
浏览 146回答 1
1回答

喵喔喔

不要降低精度并期望计算机重新创建它。long currentTime = 1350065634345877L;long stateStartTime = 1350065121656832L;long delta = 1L;double speed = 5.0E8;和你的最后两行(没有其他变化)输出1.2689045E712689045要使倒数第二行与最后一行匹配,您可以使用BigDecimal类似System.out.println(new BigDecimal(currentTime - (stateStartTime + (delta * speed)))        .toPlainString());
随时随地看视频慕课网APP

相关分类

Java
我要回答