Tout est correct.
Vous pouvez lire quelques détails de haut niveau dans another answer on SO ou lire plus documentation to BigDecimal
Il est rare d'utiliser BigDecimal
constructeur avec double
param, car elle représente exactement ce qui est à l'intérieur double
. Ainsi, lorsque vous écrivez: new BigDecimal(20.775)
vous n'êtes pas nécessairement 20,775 à la suite (plutôt que vous aurez quelque chose comme 20.77499999999999857891452847979962825775146484375
)
Pour vous tester:
1) le test de représentation BigDecimal
a) System.out.println(new BigDecimal(20.775));
=>20.77499999999999857891452847979962825775146484375
b) System.out.println(new BigDecimal("20.775"));
=>20.775
2) Test d'arrondi avec différents constructeurs: BigDecimal
a) new BigDecimal(20.775)
après arrondi à mi-hauteur affichera 20,77.
b) new BigDecimal("20.775")
après arrondi la moitié vers le haut montrera 20,78.
c) new BigDecimal(String.valueOf(20.775)
après avoir arrondi la moitié vers le haut affichera 20,78. En guise de conclusion: Ne pas utiliser le constructeur BigDecimal
avec double
param. Utilisez plutôt le constructeur BigDecimal
avec String
param.
Hope it helps
double possible de [imprédictibilité du constructeur de BigDecimal (double)] (https://stackoverflow.com/questions/12218515/unpredictability-of-the-bigdecimaldouble-constructor) – Goibniu
BigDecimal est arrondi correctement. Vous utilisez doubleValue(), ce qui provoque l'erreur. –