@jatan
Merci pour votre réponse. Ca a du sens. Pouvez-vous s'il vous plaît m'expliquer MathContext dans le contexte de la méthode BigDecimal # round.
Il n'y a rien de spécial par rapport à BigDecimal.round()
toute autre méthode BigDecimal
. Dans tous les cas, le MathContext
spécifie le nombre de chiffres significatifs et la technique d'arrondi. Fondamentalement, il y a deux parties de chaque MathContext
. Il y a une précision, et il y a aussi un RoundingMode
.
La précision spécifie à nouveau le nombre de chiffres significatifs. Donc, si vous spécifiez 123
comme un nombre et que vous demandez 2 chiffres significatifs, vous obtiendrez 120
. Il pourrait être plus clair si vous pensez en termes de notation scientifique.
123
serait 1.23e2
en notation scientifique. Si vous ne gardez que 2 chiffres significatifs, vous obtenez 1.2e2
ou 120
. En réduisant le nombre de chiffres significatifs, nous réduisons la précision avec laquelle nous pouvons spécifier un nombre.
La partie RoundingMode
spécifie comment nous devrions gérer la perte de précision. Pour réutiliser l'exemple, si vous utilisez 123
comme numéro et que vous demandez 2 chiffres significatifs, vous avez réduit votre précision. Avec un RoundingMode
de HALF_UP
(le mode par défaut), 123
deviendra 120
. Avec un RoundingMode
de CEILING
, vous obtiendrez 130
.
Par exemple:
System.out.println(new BigDecimal("123.4",
new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
Sorties:
123.4
1.2E+2
1.3E+2
2E+2
Vous pouvez voir que les deux la précision et le mode d'arrondi affectent la sortie.
Existe-t-il un moyen de formater '123.4' en utilisant 2 chiffres significatifs dans une chaîne comme' 120'? C'est 2 chiffres significatifs (comme le '1.2E2') parce que les zéros de fin ne sont pas classiquement inclus dans la récupération des chiffres significatifs à moins qu'il y ait une décimale finale. Et pour mes besoins, si le nombre à mettre en forme était '103,4', je m'en fiche que vous ne puissiez pas dire qu'il y a 2 sig figs dans le résultat' 100' qui en résulte. Je veux juste un affichage plus simple/plus propre des nombres. – hepcat72