วิธีการแปลง BigDecimal เป็น Double ใน Java?


112

เราจะแปลงBigDecimalเป็นDoublejava ได้อย่างไร? ฉันมีข้อกำหนดที่เราต้องใช้ Double เป็นอาร์กิวเมนต์ แต่เราได้รับBigDecimalดังนั้นฉันจึงต้องแปลงBigDecimalเป็นDoubleไฟล์.


10
How aboutnew BigDecimal(2).doubleValue()
Matthias

6
อ่านเอกสารก่อนถามคำถามทุกครั้ง คุณมักจะพบว่าคำถามของคุณมีคำตอบ ดูdoubleValue(). (คำแนะนำ: หากต้องการค้นหาเอกสารสำหรับคลาสที่ต้องการเพียงแค่ค้นหาชื่อคลาสโดย Google แล้วตามด้วย java ตัวอย่างเช่นหากต้องการค้นหาเอกสารนี้ฉันค้นหา "BigDecimal Java")
Justin

1
"ฉันมีข้อกำหนดที่เราต้องใช้ Double เป็นอาร์กิวเมนต์" รับข้อกำหนดที่เปลี่ยนแปลง ไม่มีประโยชน์ในการใช้BigDecimalงานเลยเว้นแต่คุณจะใช้แบบ end-to-end ข้อกำหนดนี้ทำให้ความถูกต้องลดลง อาจส่งผลกระทบต่อการปฏิบัติตามกฎข้อบังคับ และอาจเป็นความประมาทที่สามารถดำเนินการได้
Marquis of Lorne

ทำไมคุณถึงใช้Doubleและไม่doubleใช้ มันเป็นสนามที่สามารถnull?
Peter Lawrey

การใช้ @EJP doubleไม่ได้แย่ขนาดนั้น แต่เนื่องจากมีความแม่นยำในการแสดง 15+ หลักซึ่งเกินกว่าที่โปรแกรมส่วนใหญ่ต้องการ แต่ฉันยอมรับว่าไม่มีประเด็นใดที่จะใช้ BigDecimal ในบางครั้งเนื่องจากคุณมีแนวโน้มที่จะเพิ่มจุดบกพร่อง / ความซับซ้อน
Peter Lawrey

คำตอบ:


227

คุณต้องใช้doubleValue()เมธอดเพื่อรับค่าสองเท่าจากอ็อบเจ็กต์ BigDecimal

BigDecimal bd; // the value you get
double d = bd.doubleValue(); // The double you want

สวัสดีฉันใช้เหมือนกัน แต่ปัญหาคือคำตอบทั้งสองต่างกันผลลัพธ์ทศนิยมของฉันคือ 13555261857.79 และเมื่อแปลงเป็นสองเท่าของ 1.355526185779E10 .. ฉันจะได้ผลลัพธ์เดียวกันหลังจากแปลงทศนิยมเป็นสองเท่าได้อย่างไร
user13926345

@ user13926345 - ทั้งสองค่าเหมือนกัน เพียงแค่ว่าการส่งออกครั้งแรกคือการแสดงปกติของคุณค่าและอื่น ๆ ที่เป็นตัวแทนทางวิทยาศาสตร์
SudoRahul

35

คุณสามารถแปลงBigDecimalไปใช้double .doubleValue()แต่เชื่อฉันเถอะว่าอย่าใช้มันหากคุณมีการเปลี่ยนแปลงสกุลเงิน ควรดำเนินการกับBigDecimalวัตถุโดยตรงเสมอ การสูญเสียความแม่นยำในการคำนวณเหล่านี้เป็นปัญหาใหญ่ในการคำนวณที่เกี่ยวข้องกับสกุลเงิน


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