จะทราบได้อย่างไรว่า BigDecimal สามารถแปลงให้ลอยหรือเป็นสองเท่าได้อย่างแน่นอน
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)แต่มันดูยุ่ง ฉันต้องการถามที่นี่เพราะอาจมี (ต้อง!) เป็นวิธีที่ง่ายกว่า เพื่อความชัดเจนฉันไม่ต้องการโซลูชันประสิทธิภาพสูง