Java'da Long'dan Double'a Dönüşüm


93

Bir Longveri türünü Doubleveya türüne dönüştürmenin herhangi bir yolu var mı double?

Örneğin, 15552451Lbir doubleveri türüne dönüştürmem gerekiyor .

Yanıtlar:


137

Şunları yapabilirsiniz:

double d = (double)15552451L;

Ya da Long nesnesinden şu şekilde iki katına çıkabilirsiniz:

Long l = new Long(15552451L);
double d = l.doubleValue();

6
Orada herhangi bir dizge ayrıştırmaya gerek yok: Long.valueOf(15552451L).doubleValue()geçmek istiyorsanız Long. doubleBazı otomatik / kutudan çıkarma yapmanın dışında, bunun a'daki oyuncu kadrosuyla aynı olduğunu unutmayın.
Joe Kearney

4
Yaptım. Bunu yapmak için bir dizeyi ayrıştırmak (şimdi yanıtın dışında düzenlenmiştir), performansı birçok büyüklük sırasına göre düşürecektir. Boks daha ucuzdur, ancak yine de kaçınılmaya değer, özellikle de bu gibi durumlarda (kullanmaktan new) kaçınılamaz.
Joe Kearney

Sanırım örneğin Long -> double'dan alabileceğinizi göstermesi gerekiyordu. Long'un nasıl başlatıldığı o kadar önemli görünmüyor ..
ams

1
Verilen cevaptaki örnek düzenlendiği için artık daha makul görünüyor. Bir String aracılığıyla bir değerden ikiye dönüşümün iyi bir uygulama olmadığını düşünüyorum. Bunun oldukça tartışmasız olduğunu düşünürdüm.
Joe Kearney

1
Açıkça yayınlamanıza gerek yoktur. Sadece çalışıyor:double d = 15552451L;
cutemachine

20

Basit döküm?

double d = (double)15552451L;

Ve eğer değişmez sadece onun bir15552451d
Jon Freedman

2
Hatta bir alçıya gerek olmadığını düşünüyorum, bunun gibi uzun bir değere sahip bir double oluşturabilirsiniz: "double d = 1234L;".
crusam

Muhtemelen hayır - ama soru, döküm gibi bir kavramın girişini garanti edecek kadar basit.
Jim Brissom

9

Daha önce de belirtildiği gibi, sadece ikiye katlayabilirsiniz. Ancak, uzuntan ikiye dönüştürmeye dikkat edin çünkü java'da uzuntan ikiye dönüştürme daralmış bir dönüşümdür .

Double türünden uzun yazı türüne dönüştürme, 64 bitlik bir kayan nokta değerinden 64 bitlik tam sayı gösterimine önemsiz olmayan bir çeviri gerektirir. Gerçek çalışma zamanı değerine bağlı olarak bilgiler kaybolabilir.

örneğin aşağıdaki program 0 değil 1 yazdıracak

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

4

İkili dönüşümü mü arıyorsunuz?

double result = Double.longBitsToDouble(15552451L);

Bu size literal doubleile aynı bit modelini verecektir long.

İkili veya onaltılık değişmez değerler burada kullanışlı olacaktır. İşte bazı örnekler.

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

(Bkz. Double.longBitsToDouble (uzun) )

Ayrıca longgeri alabilirsiniz

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

( Double.doubleToRawLongBits'e (çift) bakın )


Bu başka bir şey yapar, jdoc'a bakın ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser

Evet. Ama belirtmedi nasıl o dönüştürmek istiyor longiçin doublene de herhangi bir cevabı kabul etmedi (ben döküm Java kullanırken ilk öğrendiği şeylerden biri olduğunu düşünüyorum). Belki doublede longdeğerle aynı bit desenine sahip bir elde etmek istiyor . Ben bilmiyorum. Ben de cevabı verdim.
pvorb

Ek bilgiler ekledim, bu yüzden cevap daha değerli.
pvorb

3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

Bu şekilde Long type'ı Double veya Float veya Int'ye sorunsuz bir şekilde dönüştürebiliriz çünkü string değerini Double veya Float veya Int'e dönüştürmek kolaydır.


2
Cevap olarak gönderdiğiniz koda bir açıklama eklemek her zaman daha iyidir, böylece ziyaretçilerin bunun neden iyi bir cevap olduğunu anlamalarına yardımcı olur.
abarisone

1

Uzun bir tarih türü ile ne demek istiyorsun ?

Bir ikiye uzatı atabilirsiniz:

double d = (double) 15552451L;

Sanırım uzun bir tarih "19 Eylül Salı 24893243092333" gibi bir şey olurdu.
Teemu Leisti

1

Bunun gibi bir şey deneyebilirsiniz:

long x = somevalue;

double y = Double.longBitsToDouble(x);

0

Senin için iyi olduğunu düşünüyorum.

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

Peki ya bu kod? : D

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.