203 votes

Comment convertir un double en long sans couler ?

Quelle est la meilleure façon de convertir un double en un long sans couler ?

Par exemple :

double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);

265voto

Jon Skeet Points 692016

En supposant que vous êtes satisfait de la troncature vers zéro, il suffit de lancer :

double d = 1234.56;
long x = (long) d; // x = 1234

Cela sera plus rapide que de passer par les classes wrapper - et surtout, c'est plus lisible. Maintenant, si vous avez besoin d'arrondir autre chose que "toujours vers zéro", vous aurez besoin d'un code un peu plus compliqué.

140voto

... Et voici la méthode d'arrondi qui ne tronque pas. Je me suis empressé de le chercher dans le manuel de l'API Java :

double d = 1234.56;
long x = Math.round(d); //1235

67voto

leogps Points 1

L'approche privilégiée devrait être :

Double.valueOf(d).longValue()

De la [Documentation sur Double (Java Platform SE 7)](http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf(double) :

Double.valueOf(d)

Retourne un Double représentant l'instance spécifiée double valeur. Si une nouvelle Double n'est pas nécessaire, cette méthode devrait généralement être utilisée de préférence au constructeur Double(double) , car cette méthode est susceptible d'offrir de bien meilleures performances spatiales et temporelles en mettant en cache les valeurs fréquemment demandées. en mettant en cache les valeurs fréquemment demandées.

36voto

Michael Myers Points 82361

(new Double(d)).longValue() interne effectue simplement un cast, il n'y a donc aucune raison de créer un objet Double.

14voto

Tyler Points 349

La bibliothèque mathématique de Guava possède une méthode spécialement conçue pour convertir un double en un long :

long DoubleMath.roundToLong(double x, RoundingMode mode)

Vous pouvez utiliser java.math.RoundingMode pour spécifier le comportement d'arrondi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X