Lớp BigDecimal
có một số phương thức hữu ích để đảm bảo chuyển đổi lossless:
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
Tuy nhiên, phương pháp floatValueExact()
và doubleValueExact()
không tồn tại.
Tôi đọc mã nguồn OpenJDK cho các phương thức floatValue()
và doubleValue()
. Cả hai dường như dự phòng Float.parseFloat()
và Double.parseDouble()
tương ứng, có thể trả về vô cực dương hoặc âm. Ví dụ: phân tích chuỗi 10.000 9 giây sẽ trả về vô cực dương. Theo tôi hiểu, BigDecimal
không có một khái niệm nội bộ về vô cực. Hơn nữa, phân tích một chuỗi 100 9s như double
cho 1.0E100
, mà không phải là vô tận, nhưng mất độ chính xác.
Một thực hiện hợp lý là gì floatValueExact()
và doubleValueExact()
?
Tôi nghĩ về một double
giải pháp bằng cách kết hợp BigDecimal.doubleValue()
, BigDecial.toString()
, Double.parseDouble(String)
và Double.toString(double)
, nhưng có vẻ lộn xộn. Tôi muốn hỏi ở đây vì có thể (phải!) Là một giải pháp đơn giản hơn.
Để rõ ràng, tôi không cần một giải pháp hiệu suất cao.