Ich brauche die folgenden Ergebnisse
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
oder .setScale()
? Wie gehe ich vor?
java
rounding
bigdecimal
n / a
quelle
quelle
BigDecimal bd1 = new BigDecimal(100.12); BigDecimal bd2 = bd1.setScale(0, RoundingMode.HALF_UP); System.out.println(bd1.equals(bd2));
druckt falschRoundingMode
was ist das? Es istBigDecimal
Wenn ich mich an Grodriguez 'Antwort halte
Dies ist die Ausgabe
Was nicht ganz das ist, was ich will, also habe ich das gemacht.
Das bekomme ich
Dies löst mein Problem vorerst .. :) Vielen Dank an alle.
quelle
DecimalFormat
(wie innew DecimalFormat("###.00")
) die Konvertierung einesBigDecimal
Backs in einen String verwalten. Es ergibt"101.00"
als Ergebnis für beide Werte, dass die Snippets von @Grodriquez und Sie erstellt haben.Hier ist eine schrecklich komplizierte Lösung, aber sie funktioniert:
Testcode:
Ausgabe:
quelle
input.toBigInteger().toString().length()
Teil wäre viel effizienter, wenn ein Logarithmus verwendet würde, so etwas wieround_up(log(input)) + (1 if input is a power of ten, else 0)
Schauen Sie sich einfach an:
http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP
und:
Oder wenn Sie Java 6 verwenden
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
und entweder:
quelle
Ich glaube nicht, dass Sie es mit einem einzigen Befehl so abrunden können. Versuchen
Ich habe den Rest Ihrer Beispiele getestet und es werden die gewünschten Werte zurückgegeben, aber ich kann die Richtigkeit nicht garantieren.
quelle
Sie wollen
quelle
round
: "Wenn die Genauigkeitseinstellung 0 ist, findet keine Rundung statt."