การแปลงจาก Long เป็น Double ใน Java


93

มีวิธีใดในการแปลงLongชนิดข้อมูลเป็นDoubleหรือdouble?

ตัวอย่างเช่นฉันต้องการแปลง15552451Lเป็นdoubleประเภทข้อมูล

คำตอบ:


137

คุณสามารถทำได้:

double d = (double)15552451L;

หรือคุณอาจได้รับสองเท่าจาก Long object เป็น:

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

6
ไม่จำเป็นต้องแยกสตริงมี: ถ้าคุณต้องการที่จะไปผ่านLong.valueOf(15552451L).doubleValue() Longโปรดทราบว่าสิ่งนี้เหมือนกันภายในเหมือนกับการแคสต์จาก a doubleยกเว้นว่าคุณกำลังทำการอัตโนมัติ / แกะกล่อง
Joe Kearney

4
ฉันทำ. การแยกวิเคราะห์สตริงเพื่อทำสิ่งนี้ (แก้ไขโดยไม่มีคำตอบแล้ว) จะลดประสิทธิภาพการทำงานลงตามลำดับความสำคัญจำนวนมาก การชกมวยมีราคาไม่แพง แต่ก็ยังคุ้มค่าที่จะหลีกเลี่ยงโดยเฉพาะอย่างยิ่งในกรณีเช่นนี้ (โดยใช้new) ซึ่งไม่สามารถหลีกเลี่ยงได้
Joe Kearney

ฉันคิดว่าตัวอย่างควรจะแสดงให้เห็นว่าคุณสามารถได้รับจาก Long -> double วิธียาวได้รับการเริ่มต้นใช้งานไม่ได้ดูเหมือนว่าสิ่งที่สำคัญ ..
AMS

1
ได้รับตัวอย่างในคำตอบที่ดูสมเหตุสมผลมากขึ้นเมื่อได้รับการแก้ไขแล้ว ฉันยืนยันว่าการแปลงจากมูลค่าเป็นสองเท่าผ่านทาง String ไม่ใช่แนวทางปฏิบัติที่ดี ฉันคงคิดว่าจะไม่มีการโต้เถียงพอสมควร
Joe Kearney

1
คุณไม่จำเป็นต้องแคสต์อย่างชัดเจน มันใช้งานได้:double d = 15552451L;
cutemachine

20

หล่อง่ายๆ?

double d = (double)15552451L;

และถ้ามันเป็นเพียงตัวอักษร15552451d
Jon Freedman

2
ฉันคิดว่านักแสดงไม่จำเป็นด้วยซ้ำคุณสามารถสร้าง double ที่มีค่ายาวเช่นนี้: "double d = 1234L;"
crusam

อาจจะไม่ - แต่คำถามนี้เป็นคำถามพื้นฐานที่เพียงพอที่จะรับประกันการแนะนำแนวคิดเช่นการคัดเลือกนักแสดง
Jim Brissom

9

ดังที่ได้กล่าวไปแล้วคุณสามารถร่ายยาวเป็นสองเท่าได้ แต่ระวังการแปลงแบบ long to double เพราะ long to double เป็นการแปลงที่แคบลงใน java

การแปลงจาก type double ไปเป็น type long ต้องการการแปลที่ไม่สำคัญจากค่าทศนิยม 64 บิตเป็นการแทนค่าจำนวนเต็ม 64 บิต ข้อมูลอาจสูญหายขึ้นอยู่กับค่ารันไทม์จริง

เช่นโปรแกรมต่อไปนี้จะพิมพ์ 1 ไม่ใช่ 0

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

4

คุณกำลังมองหาการแปลงไบนารีหรือไม่?

double result = Double.longBitsToDouble(15552451L);

สิ่งนี้จะให้doubleรูปแบบบิตเดียวกับลิเทอlongรัล

ตัวอักษรไบนารีหรือเลขฐานสิบหกจะมีประโยชน์ที่นี่ นี่คือตัวอย่างบางส่วน.

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

(ดูDouble.longBitsToDouble (ยาว) )

คุณยังสามารถรับlongหลังได้อีกด้วย

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

(ดูDouble.doubleToRawLongBits (คู่) )


สิ่งนี้ทำอย่างอื่นดูที่ jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser

ใช่. แต่เขาไม่ได้ระบุว่าต้องการแปลงlongเป็นอย่างไรdouble(ฉันคิดว่าการแคสต์เป็นสิ่งแรกที่คุณเรียนรู้เมื่อใช้ Java) และเขาไม่ยอมรับคำตอบใด ๆ บางทีเขาอาจต้องการdoubleรูปแบบบิตเดียวกับlongค่า ดีฉันไม่รู้ ผมก็เลยให้คำตอบ
pvorb

ฉันเพิ่มข้อมูลเพิ่มเติมคำตอบจึงมีค่ามากขึ้น
pvorb

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

วิธีนี้เราสามารถแปลง Long type เป็น Double หรือ Float หรือ Int ได้โดยไม่มีปัญหาเพราะง่ายต่อการแปลงค่าสตริงเป็น Double หรือ Float หรือ Int


2
การเพิ่มคำอธิบายให้กับโค้ดที่คุณโพสต์เป็นคำตอบจะดีกว่าเสมอเพื่อให้ผู้เข้าชมเข้าใจว่าเหตุใดจึงเป็นคำตอบที่ดี
หอยเป๋าฮื้อ

1

ประเภทวันที่แบบยาวหมายถึงอะไร?

คุณสามารถร่ายยาวเป็นสองเท่า:

double d = (double) 15552451L;

ฉันเดาว่าวันที่ยาวนานน่าจะเป็น "วันอังคารที่ 19 กันยายน พ.ศ. 24893243092333"
Teemu Leisti


0

ฉันคิดว่ามันเป็นสิ่งที่ดีสำหรับคุณ

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

แล้วรหัสนี้ล่ะ? : ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.