Konversi dari Long ke Double di Jawa

93

Apakah ada cara untuk mengonversi Longtipe data menjadi Doubleatau double?

Misalnya, saya perlu mengonversi 15552451Lke doubletipe data.

Harry
sumber

Jawaban:

137

Anda cukup melakukan:

double d = (double)15552451L;

Atau Anda bisa mendapatkan dua kali lipat dari objek Long sebagai:

Long l = new Long(15552451L);
double d = l.doubleValue();
YoK
sumber
6
Tidak perlu parsing string apa pun di sana: Long.valueOf(15552451L).doubleValue()jika Anda ingin melalui Long. Perhatikan bahwa ini sama, secara internal, seperti cast dari a double, kecuali Anda melakukan beberapa auto / unboxing.
Joe Kearney
4
Aku melakukannya. Mengurai string untuk melakukan ini (sekarang diedit dari jawaban) akan menurunkan kinerja dengan banyak urutan besarnya. Tinju lebih murah tetapi masih layak untuk dihindari, terutama dalam kasus seperti ini (penggunaan new) yang tidak dapat diabaikan.
Joe Kearney
Saya pikir contoh itu seharusnya menunjukkan bahwa Anda bisa mendapatkan dari Long -> double. Bagaimana Long dimulai tampaknya tidak begitu penting ..
ams
1
Memang contoh di jawaban terlihat lebih masuk akal sekarang setelah diedit. Saya berpendapat bahwa konversi dari nilai menjadi ganda melalui String bukanlah praktik yang baik. Saya akan berpikir itu tidak terlalu kontroversial.
Joe Kearney
1
Anda tidak perlu melakukan cast secara eksplisit. Ini hanya bekerja:double d = 15552451L;
cutemachine
20

Casting sederhana?

double d = (double)15552451L;
Jim Brissom
sumber
Dan jika itu hanya literal15552451d
Jon Freedman
2
Saya bahkan berpikir pemeran tidak diperlukan, Anda dapat membuat ganda dengan nilai panjang seperti ini: "double d = 1234L;".
crusam
Mungkin tidak - tetapi pertanyaannya cukup mendasar untuk menjamin pengenalan konsep seperti casting.
Jim Brissom
9

Seperti yang telah disebutkan, Anda cukup mengubah panjang menjadi dua kali lipat. Tapi hati - hati dengan konversi panjang ke ganda karena panjang menjadi ganda adalah konversi yang menyempit di java.

Konversi dari tipe ganda ke tipe panjang membutuhkan terjemahan nontrivial dari nilai floating-point 64-bit ke representasi integer 64-bit. Bergantung pada nilai run-time yang sebenarnya, informasi mungkin hilang.

misalnya program berikut akan mencetak 1 bukan 0

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

Apakah Anda mencari konversi biner?

double result = Double.longBitsToDouble(15552451L);

Ini akan memberi Anda doublepola bit yang sama dengan longliteral.

Literal biner atau heksadesimal akan berguna, di sini. Berikut ini beberapa contohnya.

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

(Lihat Double.longBitsToDouble (long) )

Anda juga bisa mendapatkan bagian longbelakangnya

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

(Lihat Double.doubleToRawLongBits (double) )

pvorb
sumber
Ini melakukan sesuatu yang lain, lihat jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser
Iya. Tapi dia tidak menentukan bagaimana ia ingin mengkonversi longke double(saya pikir casting salah satu hal pertama yang Anda pelajari ketika menggunakan Java) ia juga tidak menerima jawaban apapun. Mungkin dia ingin mendapatkan doublepola bit yang sama dengan longnilainya. Saya tidak tahu. Jadi saya hanya memberikan jawabannya.
pvorb
Saya menambahkan informasi tambahan, jadi jawabannya lebih berharga.
pvorb
3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

Dengan cara ini kita dapat mengubah tipe Long menjadi Double atau Float atau Int tanpa masalah karena mudah untuk mengubah nilai string menjadi Double atau Float atau Int.

Manav Patadia
sumber
2
Selalu lebih baik untuk menambahkan penjelasan ke kode yang Anda posting sebagai jawaban, sehingga akan membantu pengunjung memahami mengapa ini adalah jawaban yang bagus.
abarisone
1

Apa yang Anda maksud dengan tipe tanggal panjang ?

Anda dapat mengubah panjang menjadi ganda:

double d = (double) 15552451L;
Joe Kearney
sumber
Saya rasa kencan yang panjang akan menjadi seperti "Selasa, 19 September 24893243092333".
Teemu Leisti
1

Anda dapat mencoba sesuatu seperti ini:

long x = somevalue;

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

Saya pikir itu baik untuk Anda.

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

Bagaimana dengan kode ini? : D

spearkkk
sumber