Quelle est la différence entre ces deux appels? (Est-il?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
Quelle est la différence entre ces deux appels? (Est-il?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
Un point important qu'il est fait allusion, mais pas directement abordé est la différence entre la "précision" et "échelle" et la façon dont ils sont utilisés dans les deux états. "précision" est le nombre total de chiffres dans un nombre. "l'échelle" est le nombre de chiffres à droite du point décimal.
Le MathContext constructeur accepte uniquement précision et RoundingMode comme arguments, et, par conséquent, l'échelle n'est jamais spécifié dans la première instruction.
setScale()
évidemment accepte l'échelle comme un argument, ainsi que RoundingMode, cependant la précision est jamais précisé dans la deuxième instruction.
Si vous déplacez la virgule d'un endroit pour le droit, la différence sera plus claire:
// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456
Il y a en effet une grande différence, que vous devriez garder à l'esprit. setScale vraiment définir l'échelle de votre nombre, alors que les balles ne le tour de votre nombre spécifié de chiffres, MAIS il "commence à partir de la gauche chiffres du résultat exact", comme indiqué dans le jdk. Donc en ce qui concerne votre échantillon, les résultats sont les mêmes, mais essayez 0.0034 à la place. Voici ma note à ce sujet sur mon blog:
http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.