为什么这个 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.0f
和 1439230171182L - 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脚本代码
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.0f
和 1439230171182L - 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脚本代码