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.

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();

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;

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);

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) )


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.


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;

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);

0

Saya pikir itu baik untuk Anda.

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

Bagaimana dengan kode ini? : D

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.