Class BigDecimal
มีวิธีการที่เป็นประโยชน์ในการรับประกันการแปลงแบบไม่สูญเสีย
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
อย่างไรก็ตามวิธีการfloatValueExact()
และdoubleValueExact()
ไม่ได้อยู่
ผมอ่านรหัสที่มา OpenJDK สำหรับวิธีการและfloatValue()
doubleValue()
ทั้งคู่ดูเหมือนจะย้อนกลับไปที่Float.parseFloat()
และDouble.parseDouble()
ตามลำดับซึ่งอาจส่งกลับอินฟินิตี้บวกหรือลบ ตัวอย่างเช่นการแยกสตริง 10,000 9s จะส่งกลับค่าบวกอนันต์ อย่างที่ฉันเข้าใจBigDecimal
ไม่มีแนวคิดเกี่ยวกับอินฟินิตี้ภายใน นอกจากนี้การแยกสตริงของ 100 9s ตามที่double
ให้1.0E100
ซึ่งไม่ได้ไม่มีที่สิ้นสุด แต่สูญเสียความแม่นยำ
การใช้งานที่เหมาะสมคืออะไรfloatValueExact()
และdoubleValueExact()
?
ฉันคิดว่าเกี่ยวกับdouble
การแก้ปัญหาโดยการรวมBigDecimal.doubleValue()
, BigDecial.toString()
, Double.parseDouble(String)
และDouble.toString(double)
แต่มันดูยุ่ง ฉันต้องการถามที่นี่เพราะอาจมี (ต้อง!) เป็นวิธีที่ง่ายกว่า
เพื่อความชัดเจนฉันไม่ต้องการโซลูชันประสิทธิภาพสูง