Conversion de Long en Double en Java

91

Existe-t-il un moyen de convertir un Longtype de données en Doubleou double?

Par exemple, je dois convertir 15552451Len un doubletype de données.

Harry
la source

Réponses:

134

Vous pouvez simplement faire:

double d = (double)15552451L;

Ou vous pouvez obtenir le double de l'objet Long comme:

Long l = new Long(15552451L);
double d = l.doubleValue();
YoK
la source
6
Vous n'avez besoin d'aucune analyse de chaîne ici: Long.valueOf(15552451L).doubleValue()si vous voulez passer par Long. Notez que c'est la même chose, en interne, que la distribution à partir de a double, sauf que vous faites de l'auto / unboxing.
Joe Kearney
4
J'ai fait. L'analyse d'une chaîne pour ce faire (désormais supprimée de la réponse) dégradera les performances de plusieurs ordres de grandeur. La boxe est moins chère mais vaut tout de même la peine d'être évitée, en particulier dans des cas comme celui-ci (utilisation new) où elle ne peut pas être éludée.
Joe Kearney
Je pense que l'exemple était censé montrer que vous pouvez obtenir de Long -> double. Comment le Long a été initialisé ne semble pas si important.
ams
1
Certes, l'exemple de la réponse semble plus raisonnable maintenant qu'il a été modifié. Je maintiens que la conversion d'une valeur en double via une chaîne n'est pas une bonne pratique. J'aurais pensé que c'était assez peu controversé.
Joe Kearney
1
Vous n'avez pas besoin de lancer explicitement. Cela fonctionne juste:double d = 15552451L;
cutemachine
20

Un casting simple?

double d = (double)15552451L;
Jim Brissom
la source
Et si c'est un littéral juste15552451d
Jon Freedman
2
Je pense même qu'un casting n'est pas nécessaire, vous pouvez créer un double avec une valeur longue comme celle-ci: "double d = 1234L;".
crusam
Probablement pas - mais la question est suffisamment fondamentale pour justifier l'introduction d'un concept comme le casting.
Jim Brissom
9

Comme déjà mentionné, vous pouvez simplement lancer long pour doubler. Mais soyez prudent avec une conversion longue à double car longue à double est une conversion rétrécie en java.

La conversion de type double en type long nécessite une traduction non triviale d'une valeur à virgule flottante 64 bits à la représentation entière de 64 bits. Selon la valeur d'exécution réelle, des informations peuvent être perdues.

Par exemple, le programme suivant imprimera 1 et non 0

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);
Profond
la source
3

Cherchez-vous la conversion binaire?

double result = Double.longBitsToDouble(15552451L);

Cela vous donnera doublele même motif de bits que le longlittéral.

Les littéraux binaires ou hexadécimaux seront utiles ici. Voici quelques exemples.

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

(Voir Double.longBitsToDouble (long) )

Vous pouvez également récupérer longavec

long bits = Double.doubleToRawLongBits(Double.NaN);

(Voir Double.doubleToRawLongBits (double) )

pvorb
la source
Cela fait autre chose, voir le jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser
Oui. Mais il n'a pas précisé comment il veut convertir longà double(je pense que la coulée est l' une des premières choses que vous apprenez lorsque vous utilisez Java) ni n'a accepter aucune réponse. Peut-être qu'il veut obtenir un doubleavec le même motif de bits que la longvaleur. Eh bien, je ne sais pas. Alors j'ai juste donné la réponse.
pvorb
J'ai ajouté des informations supplémentaires, donc la réponse est plus précieuse.
pvorb
3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

De cette façon, nous pouvons convertir le type Long en Double ou Float ou Int sans aucun problème car il est facile de convertir une valeur de chaîne en Double ou Float ou Int.

Manav Patadia
la source
2
Il est toujours préférable d'ajouter une explication au code que vous publiez en tant que réponse, afin que cela aide les visiteurs à comprendre pourquoi c'est une bonne réponse.
abarisone
1

Qu'entendez-vous par un type de date longue ?

Vous pouvez lancer un long en double:

double d = (double) 15552451L;
Joe Kearney
la source
J'imagine qu'une longue date serait quelque chose comme "mardi 19 septembre 24893243092333".
Teemu Leisti
0

Vous pouvez essayer quelque chose comme ceci:

long x = somevalue;

double y = Double.longBitsToDouble(x);
Vikas
la source
0

Je pense que c'est bon pour toi.

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

Et ce code? :RÉ

Spearkkk
la source