Quelle est la meilleure façon de convertir un double en long sans lancer?
Par exemple:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
Traîneau
la source
la source
myLong == (long)(myDouble + 1)
oùmyLong
est égalmyDouble
àtrue
Double.longValue();
) est toujours utile si vous avez des valeurs doubles de choses comme une arraylist comme celle-ci,ArrayList<Double>
car vous obtiendrez une erreur de conversion impossible. Je dis simplement ceci pour quiconque est venu ici et a eu un problème légèrement différent.Réponses:
En supposant que vous êtes satisfait de la troncature vers zéro, lancez simplement:
Ce sera plus rapide que de passer par les classes wrapper - et plus important encore, c'est plus lisible. Maintenant, si vous avez besoin d'un arrondi autre que "toujours vers zéro", vous aurez besoin d'un code légèrement plus compliqué.
la source
... Et voici la manière d'arrondir qui ne tronque pas. Dépêché de le rechercher dans le manuel de l'API Java:
la source
L'approche préférée devrait être:
À partir de la documentation Double (Java Platform SE 7) :
la source
(new Double(d)).longValue()
en interne ne fait qu'un casting, il n'y a donc aucune raison de créer un objet Double.la source
La bibliothèque Guava Math a une méthode spécialement conçue pour convertir un double en long:
Vous pouvez utiliser
java.math.RoundingMode
pour spécifier le comportement d'arrondi.la source
Si vous avez un fort soupçon que le DOUBLE est en fait un LONG, et que vous voulez
1) obtenir une poignée sur sa valeur EXACT en tant que LONG
2) lancer une erreur quand ce n'est pas un LONG
vous pouvez essayer quelque chose comme ceci:
Long est un sous-ensemble de Double, vous pourriez donc obtenir des résultats étranges si vous essayez sans le savoir de convertir un Double qui est en dehors de la plage de Long:
la source
Long is a subset of Double
n'est pas précis. Le nombre de chiffres significatifs pour Long est supérieur à Double, ainsi certaines informations détenues par Long peuvent être perdues lors de la conversion en Double. Exemple = tio.runC'est le contraire de ce qui est demandé, mais néanmoins, cela pourrait s'avérer utile pour les autres:
la source
Simplement par ce qui suit:
la source
En termes simples, la diffusion est plus efficace que la création d'un objet Double.
la source