Konvertierung von Long zu Double in Java

89

Gibt es eine Möglichkeit, einen LongDatentyp in Doubleoder zu konvertieren double?

Zum Beispiel muss ich 15552451Lin einen doubleDatentyp konvertieren .

Harry
quelle

Antworten:

132

Sie könnten einfach tun:

double d = (double)15552451L;

Oder Sie könnten das Doppelte von Long-Objekt erhalten als:

Long l = new Long(15552451L);
double d = l.doubleValue();
YoK
quelle
6
Dort muss kein String analysiert werden: Long.valueOf(15552451L).doubleValue()Wenn Sie über gehen möchten Long. Beachten Sie, dass dies intern dasselbe ist wie die Besetzung von a double, außer dass Sie Auto / Unboxing durchführen.
Joe Kearney
4
Ich tat. Wenn Sie dazu einen String analysieren (der jetzt aus der Antwort heraus bearbeitet wurde), wird die Leistung um viele Größenordnungen beeinträchtigt. Boxen ist billiger, aber es lohnt sich dennoch, es zu vermeiden, insbesondere in Fällen wie diesem (Verwenden new), in denen es nicht beseitigt werden kann.
Joe Kearney
Ich denke, das Beispiel sollte zeigen, dass man von Long -> double bekommen kann. Wie der Long initialisiert wurde, scheint nicht so wichtig zu sein.
ams
1
Zugegeben, das Beispiel in der Antwort sieht nach der Bearbeitung vernünftiger aus. Ich behaupte, dass die Konvertierung von einem Wert in ein Double über einen String keine gute Praxis ist. Ich hätte das für ziemlich unumstritten gehalten.
Joe Kearney
1
Sie müssen nicht explizit wirken. Es funktioniert einfach:double d = 15552451L;
Cutemachine
20

Einfaches Casting?

double d = (double)15552451L;
Jim Brissom
quelle
Und wenn es nur wörtlich ist15552451d
Jon Freedman
2
Ich denke sogar, dass eine Besetzung nicht notwendig ist. Sie können ein Double mit einem langen Wert wie diesem erstellen: "double d = 1234L;".
Crusam
Wahrscheinlich nicht - aber die Frage ist grundlegend genug, um die Einführung eines Konzepts wie Casting zu rechtfertigen.
Jim Brissom
9

Wie bereits erwähnt, können Sie einfach lange bis doppelt werfen. Seien Sie jedoch vorsichtig bei der Umwandlung von Long in Double, da Long to Double eine engere Konvertierung in Java darstellt.

Die Konvertierung vom Typ double in den Typ long erfordert eine nicht triviale Übersetzung von einem 64-Bit-Gleitkommawert in die 64-Bit-Ganzzahldarstellung. Abhängig vom tatsächlichen Laufzeitwert können Informationen verloren gehen.

Beispiel: Das folgende Programm gibt 1 und nicht 0 aus

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);
Tief
quelle
3

Suchen Sie die binäre Konvertierung?

double result = Double.longBitsToDouble(15552451L);

Dies gibt Ihnen das doublegleiche Bitmuster wie das longLiteral.

Hier sind binäre oder hexadezimale Literale hilfreich. Hier sind einige Beispiele.

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

(Siehe Double.longBitsToDouble (lang) )

Sie können auch den longRücken mit bekommen

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

(Siehe Double.doubleToRawLongBits (double) )

pvorb
quelle
Dies macht etwas anderes, siehe jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser
Ja. Aber er hat nicht angegeben , wie er will , konvertieren longzu double(ich glaube , Gießen eines der ersten Dinge , die Sie lernen , wenn Java verwendet wird ) noch hat er eine Antwort akzeptieren. Vielleicht möchte er ein doublemit dem gleichen Bitmuster wie der longWert erhalten. Nun, ich weiß es nicht. Also gab ich nur die Antwort.
Pvorb
Ich habe zusätzliche Informationen hinzugefügt, damit die Antwort wertvoller ist.
pvorb
3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

Auf diese Weise können wir Long-Typen problemlos in Double oder Float oder Int konvertieren, da es einfach ist, Zeichenfolgenwerte in Double oder Float oder Int zu konvertieren.

Manav Patadia
quelle
2
Es ist immer besser, dem Code, den Sie als Antwort veröffentlichen, eine Erklärung hinzuzufügen, damit die Besucher verstehen, warum dies eine gute Antwort ist.
Abarisone
1

Was meinst du mit einem langen Datumstyp ?

Sie können ein Long zu einem Double machen:

double d = (double) 15552451L;
Joe Kearney
quelle
Ich denke, ein langes Date wäre so etwas wie "Dienstag, 19. September 24893243092333".
Teemu Leisti
0

Sie können so etwas ausprobieren:

long x = somevalue;

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

Ich denke es ist gut für dich.

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

Wie wäre es mit diesem Code? : D.

spearkkk
quelle