为什么这个 Java 长计算 return NaN?

Why does this Java long calculation return NaN?

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);
    }
}

本次计算returns"NaN"。有谁知道为什么?

你总是除以零。您要减去两个 long,然后进行整数除法。这两个多头将小于 3600000,因此您的结果将是 (distanceInMeters / 1000) / 0 = NaN

让我们输入一些值并计算它:

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

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

0.0f/1000 = 0.0f1439230171182L - 1439230111554L = 59628L 所以我们得到

(           0.0f        ) / ((           59628L              )/3600000)

59628L/3600000 = 0(整数除法)

所以我们得到 0.0f / 0,即 NaN(不是数字)。
如果你除以 1.0f / 0 你会得到 Infinity 而对于 -1.0f / 0 你会得到 -Infinity

解决方案是像这样添加一个浮动转换:

float speed = (distanceInMeters / 1000) / ((float)(time - previousTime)/3600000);

或者像这样:

float speed = (distanceInMeters / 1000) / ((time - previousTime)/3600000.0f);

我忘记了 Java 中的整数除法。可能是因为之前写了很多Java脚本代码