Java:应用+ =时,某些内容会丢失

时间:2018-10-27 14:30:04

标签: java floating-point

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

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 :(得分:3)

不要降低精度,并期望计算机重新创建它。

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());
相关问题