J'ai un BigDecimal dont la valeur est 450,90, je veux arrondir à la valeur entière du prochain trou, puis imprimer la valeur Integer sans aucun signe décimal, comme ceci;
Val: 450.90 -> Arrondi: 451.00 -> Sortie: 451
Val: 100.00001 -> Arrondi: 101.00000 Rendement: 101
Vérifié quelques solutions mais je ne reçois pas le résultat attendu, voici mon code;
BigDecimal value = new BigDecimal(450.90);
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
return value.intValue();
Merci!
setScale
renvoie une nouvelle BigDecimal
avec le résultat, cela ne change pas l'instance sur laquelle vous l'appelez. Donc, assignez la valeur de retour à value
:
value = value.setScale(0, RoundingMode.UP);
Je l'ai également changé en RoundingMode.UP
parce que vous avez dit que toujours voulait arrondir. Mais selon vos besoins, vous voudrez peut-être plutôt RoundingMode.CEILING
; cela dépend de ce que vous voulez que -451.2
devienne (-452
[UP
] ou -451
[CEILING
]). Voir RoundingMode
pour plus d'informations.
utilisation:
value.setScale(0, RoundingMode.CEILING);
De la description de la méthode:
Notez que, les objets BigDecimal étant immuables, appelez setScale méthode n'entraînent pas la modification de l'objet d'origine, contrairement à à la convention habituelle d'avoir des méthodes nommées setX mutate field X . SetScale renvoie à la place un objet avec l'échelle appropriée; la l'objet retourné peut ou ne peut pas être nouvellement alloué.
public void test() {
BigDecimal value = new BigDecimal(450.90);
System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451
}
vous devez utiliser la valeur renvoyée
BigDecimal value = new BigDecimal(450.90);
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
notez que BigDecimal est invariant
Les opérations de mise à l'échelle/d'arrondissement (setScale et round) renvoient un BigDecimal dont la valeur est approximativement (ou exactement) égale à celle du opérande, mais dont l'échelle ou la précision est la valeur spécifiée; C'est, ils augmentent ou diminuent la précision du nombre enregistré avec effet minimal sur sa valeur.
utilisez la fonction Math.ceil()
. La méthode ceil donne le plus petit entier supérieur ou égal à l'argument.
Vous pouvez lire à ce sujet ici