是否应该将 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因为doublelong 更精确 数据类型。出于同样的原因,int 可以隐式转换为 long(但不是其他方式!)。