为什么这个Java长计算会返回NaN?

jfm*_*fmg 1 java nan long-integer

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

该计算返回"NaN".有谁知道为什么?

Kon*_*Kon 8

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

  • @ teddy3D我贬低了因为这是非常简单的你可以调试自己. (2认同)
  • 这个问题非常适合StackOverflow.因为海报没有为找到答案而开发的技术本身不是低调的理由.他付出了努力,发布了代码,解释了问题并寻求帮助. (2认同)

Psh*_*emo 5

让我们把一些我们的价值观并计算出来:

(distanceInMeters / 1000) / ((time - previousTime)/3600000);
Run Code Online (Sandbox Code Playgroud)

和...一样

(       0.0f      / 1000) / ((1439230171182L - 1439230111554L)/3600000)
Run Code Online (Sandbox Code Playgroud)

0.0f/1000 = 0.0f1439230171182L - 1439230111554L = 59628L这样我们就得到

(           0.0f        ) / ((           59628L              )/3600000)
Run Code Online (Sandbox Code Playgroud)

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

因此,我们和了0.0f / 0这是NaN(不是数字).
如果你会分裂1.0f / 0,你会得到Infinity-1.0f / 0你会得到-Infinity