J'ai besoin des résultats suivants
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
ou .setScale()
? Comment dois-je procéder?
java
rounding
bigdecimal
n / a
la source
la source
BigDecimal bd1 = new BigDecimal(100.12); BigDecimal bd2 = bd1.setScale(0, RoundingMode.HALF_UP); System.out.println(bd1.equals(bd2));
imprime fauxRoundingMode
Qu'est-ce que c'est? C'estBigDecimal
Si je passe par la réponse de Grodriguez
C'est la sortie
Ce n'est pas tout à fait ce que je veux, alors j'ai fini par faire ça ...
C'est ce que je reçois
Cela résout mon problème pour l'instant ..:) Merci à tous.
la source
DecimalFormat
(comme dansnew DecimalFormat("###.00")
) pour gérer la conversion d'unBigDecimal
retour en chaîne. Il donne"101.00"
comme résultat pour les deux valeurs que les extraits de @Grodriquez et que vous avez créés.Voici une solution terriblement compliquée, mais cela fonctionne:
Code de test:
Production:
la source
input.toBigInteger().toString().length()
partie serait beaucoup plus efficace en utilisant un logarithme, quelque chose commeround_up(log(input)) + (1 if input is a power of ten, else 0)
Regardez simplement:
http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP
et:
Ou si vous utilisez Java 6, alors
http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html#HALF_UP
http://download.oracle.com/javase/6/docs/api/java/math/MathContext.html
et soit:
la source
Je ne pense pas que vous puissiez l'arrondir comme ça en une seule commande. Essayer
J'ai testé pour le reste de vos exemples et il renvoie les valeurs voulues, mais je ne garantis pas son exactitude.
la source
Tu veux
la source
round
: "Si le paramètre de précision est égal à 0, aucun arrondi n'a lieu."