web-dev-qa-db-fra.com

Arrondir BigDecimal à Integer valeur

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!

15
Rodrigo Martinez

setScalerenvoie 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);

Exemple en direct

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.

33
T.J. Crowder

utilisation:

value.setScale(0, RoundingMode.CEILING);
4
przemek hertel

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
}
2
Fire

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.

1
venergiac

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

0
starvator