Kelas BigDecimal
memiliki beberapa metode yang berguna untuk menjamin konversi lossless:
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
Namun, metode floatValueExact()
dan doubleValueExact()
tidak ada.
Saya membaca kode sumber OpenJDK untuk metode floatValue()
dan doubleValue()
. Keduanya tampaknya mundur ke Float.parseFloat()
dan Double.parseDouble()
, masing-masing, yang dapat mengembalikan infinity positif atau negatif. Misalnya, parsing string 10.000 9s akan mengembalikan tak terhingga positif. Seperti yang saya pahami, BigDecimal
tidak memiliki konsep internal infinity. Selanjutnya, mengurai string 1009s sebagai double
memberi 1.0E100
, yang bukan tanpa batas, tetapi kehilangan presisi.
Apa itu implementasi yang masuk akal floatValueExact()
dan doubleValueExact()
?
Aku berpikir tentang double
solusi dengan menggabungkan BigDecimal.doubleValue()
, BigDecial.toString()
, Double.parseDouble(String)
dan Double.toString(double)
, tapi tampaknya berantakan. Saya ingin bertanya di sini karena mungkin ada (harus!) Solusi yang lebih sederhana.
Untuk lebih jelasnya, saya tidak perlu solusi kinerja tinggi.