2015-07-24 1 views
0

J'écris une boucle de jeu en Java et j'essaie de calculer les deltas. Lorsque vous essayez d'obtenir l'heure actuelle, ce qui suit ne me donne pas une erreur dans mon IDE. Cependant la fonction retournant un double, où sont System.nanoTime() retournent un long. Pourquoi n'est-ce pas une erreur?Est-ce que System.nanoTime() dans Java devrait être explicitement converti en un double pour la boucle de jeu?

private static double getTime() { 
    return System.nanoTime()/1000000000; 
} 

Est-ce que le casting explicite à un double mieux?

private static double getTime() { 
    return (double) System.nanoTime()/(double) 1000000000; 
} 

Répondre

2

Dans la première fonction, la division sera division entière et le résultat de la division sera coulé à double. Il est donc équivalent de return (double)(System.nanoTime()/1000000000);

Ainsi, par exemple si le System.nanoTime() donne une valeur de 142154, le getTime() renverra 0, parce que dans la division entier les fractions sont ignorées. 142154/1000000000 renvoie la valeur 0.000142154 qui sera donc arrondie à zéro.

La seconde fonction effectuera d'autre part une division en virgule flottante, qui gardera les fractions et sera donc plus précise. Vous n'avez pas besoin de convertir les deux arguments en double, un seul d'entre eux.

La raison pour laquelle la première version de getTime() ne donnera pas une erreur est que Java jette implicitement long-double parce double est plus précise le type de données quelong. Pour la même raison, int peut être implicitement casté en long (mais pas autrement!).