import java.util.*;
import java.lang.*;
import java.io.*;
public class MyClass {
public static void main (final String[] args) {
float distanceInMeters = 0.0f;
long time = 1439230171182L;
long previousTime = 1439230111554L;
float speed = (distanceInMeters / 1000) / ((time - previousTime)/3600000);
System.out.println(speed);
}
}
此计算返回“NaN”。有谁知道为什么?
答案 0 :(得分:8)
你总是被零除。你减去两个长子然后进行整数除法。这两个长度将少于3600000,因此您的结果将为(distanceInMeters / 1000) / 0
= NaN
答案 1 :(得分:5)
让我们放一些我们的值并计算它:


 (distanceInMeters / 1000)/((time - previousTime)/ 3600000);



 与


 (0.0f / 1000)/((1439230171182L)相同 - 1439230111554L)/ 3600000)



 0.0f / 1000 = 0.0f
和 1439230171182L - 1439230111554L = 59628L
所以我们得到
(0.0f)/((59628L)/ 3600000)



 59628L / 3600000
= 0
(整数除法)
所以我们以 0.0f / 0
为 NaN
(非数字)。

如果你要除 1.0f / 0
你会得到 Infinity
,对于 -1.0f / 0
你会得到 -Infinity
答案 2 :(得分:2)
解决方案是添加如下的浮动转换:
float speed = (distanceInMeters / 1000) / ((float)(time - previousTime)/3600000);
或者像这样:
float speed = (distanceInMeters / 1000) / ((time - previousTime)/3600000.0f);
我忘记了Java中的Integer部门。可能是因为我以前写了很多JavaScript代码。