Bonjour,
nous sommes récemment passés de java 1.4 à java 1.5 sur notre environnement de travail, passage qui s'est accompagné d'un gros problème:
- nous utilisons des BigDecimal pour nos opérations mathématiques, afin de contourner les problèmes liés aux erreurs de calcul des nombres flottants.
- par défaut nous forçons la "scale" à 15, ce qui nous semble correct pour représenter des données financières.
Avant la 1.4, le calcul suivant:
retournait "0.000000000000000"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 BigDecimal number1Big = new BigDecimal(number1String); BigDecimal number2Big = new BigDecimal(number2String); BigDecimal resultBig = number1Big.multiply(number2Big); String resultString = resultBig.setScale(defaultScale).toString();
Depuis la 1.5, le même calcul renvoie:
"0E-15"
Ce qui est mathématiquement correct, mais pose beaucoup de problèmes aux routines qui vont traiter ce nombre derrière, et qui n'attendent définitivement pas une représentation scientifique.
Après vérification ça n'arrive que lorsque l'on place la scale à 7 ou plus.
Y-a-t-il un moyen d'obtenir 0.000000000000000 en java 1.5, c'est à dire de forcer une représentation normale, au moins jusqu'à la 15e décimale?
edit: OK, la fonction toPlainString fait exactement ça. Je vais me fouetter...
Partager