Class BigDecimal
verfügt über einige nützliche Methoden, um eine verlustfreie Konvertierung zu gewährleisten:
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
Methoden floatValueExact()
und doubleValueExact()
existieren jedoch nicht.
Ich habe den OpenJDK-Quellcode für Methoden floatValue()
und gelesen doubleValue()
. Beide scheinen zu Rückfall Float.parseFloat()
und Double.parseDouble()
verbunden, die positive oder negative Unendlichkeit kann zurückzukehren. Wenn Sie beispielsweise eine Zeichenfolge von 10.000 9s analysieren, wird eine positive Unendlichkeit zurückgegeben. Soweit ich BigDecimal
weiß , gibt es kein internes Konzept der Unendlichkeit. Das Parsen einer Zeichenfolge von 100 9s double
ergibt 1.0E100
, was nicht unendlich ist, sondern an Präzision verliert.
Was ist eine vernünftige Implementierung floatValueExact()
und doubleValueExact()
?
Ich dachte an einer double
Lösung , die durch die Kombination von BigDecimal.doubleValue()
, BigDecial.toString()
, Double.parseDouble(String)
und Double.toString(double)
, aber es sieht chaotisch. Ich möchte hier fragen, weil es eine einfachere Lösung geben kann (muss!).
Um klar zu sein, brauche ich keine Hochleistungslösung.