La classe BigDecimala quelques méthodes utiles pour garantir une conversion sans perte:
- byteValueExact()
- shortValueExact()
- intValueExact()
- longValueExact()
Cependant, les méthodes floatValueExact()et doubleValueExact()n'existent pas.
J'ai lu le code source d'OpenJDK pour les méthodes floatValue()et doubleValue(). Les deux semblent se replier sur Float.parseFloat()et Double.parseDouble(), respectivement, ce qui peut retourner l'infini positif ou négatif. Par exemple, l'analyse d'une chaîne de 10 000 9 renvoie un infini positif. Si je comprends bien, BigDecimaln'a pas un concept interne de l'infini. En outre, l'analyse d'une chaîne de 100 9 comme doubledonne 1.0E100, ce qui n'est pas l'infini, mais perd en précision.
Qu'est-ce qu'une mise en œuvre raisonnable floatValueExact()et doubleValueExact()?
Je pensais à une doublesolution en combinant BigDecimal.doubleValue(), BigDecial.toString(), Double.parseDouble(String)et Double.toString(double), mais il semble en désordre. Je veux demander ici car il peut (doit!) Y avoir une solution plus simple.
Pour être clair, je n'ai pas besoin d'une solution performante.