是否应该将 Java 中的 System.nanoTime() 显式转换为 double for 游戏循环?
Should System.nanoTime() in Java be explicitly casted to a double for game loop?
我正在 Java 中编写游戏循环并尝试计算增量。尝试获取当前时间时,以下不会在我的 IDE 中给我一个错误。但是函数 returning 是一个 double,其中 System.nanoTime() return 是一个 long。为什么这不是错误?
private static double getTime() {
return System.nanoTime() / 1000000000;
}
明确转换为双倍更好吗?
private static double getTime() {
return (double) System.nanoTime() / (double) 1000000000;
}
在第一个函数中,除法将是整数除法,除法的结果将被转换为double
。因此它相当于 return (double)(System.nanoTime() / 1000000000);
例如,如果 System.nanoTime()
给出 142154
的值,getTime()
将 return 0,因为在整数除法中小数被忽略。 142154 / 1000000000
return 是 0.000142154
的值,因此将四舍五入为零。
另一方面,第二个函数将执行浮点除法,这将保留分数并因此更加精确。您不必将两个参数都转换为 double
,只需将其中一个转换为
第一个版本getTime()
不会报错的原因是Java隐式地将long
转换为double
因为double
是比 long
更精确 数据类型。出于同样的原因,int
可以隐式转换为 long
(但不是其他方式!)。
我正在 Java 中编写游戏循环并尝试计算增量。尝试获取当前时间时,以下不会在我的 IDE 中给我一个错误。但是函数 returning 是一个 double,其中 System.nanoTime() return 是一个 long。为什么这不是错误?
private static double getTime() {
return System.nanoTime() / 1000000000;
}
明确转换为双倍更好吗?
private static double getTime() {
return (double) System.nanoTime() / (double) 1000000000;
}
在第一个函数中,除法将是整数除法,除法的结果将被转换为double
。因此它相当于 return (double)(System.nanoTime() / 1000000000);
例如,如果 System.nanoTime()
给出 142154
的值,getTime()
将 return 0,因为在整数除法中小数被忽略。 142154 / 1000000000
return 是 0.000142154
的值,因此将四舍五入为零。
另一方面,第二个函数将执行浮点除法,这将保留分数并因此更加精确。您不必将两个参数都转换为 double
,只需将其中一个转换为
第一个版本getTime()
不会报错的原因是Java隐式地将long
转换为double
因为double
是比 long
更精确 数据类型。出于同样的原因,int
可以隐式转换为 long
(但不是其他方式!)。