Wenn der Wert 200.3456
sollte sie wie folgt formatiert werden 200.34
. Wenn es 200
dann sollte es sein 200.00
.
- Wie rundet man eine Zahl in Java auf n Dezimalstellen? (37 Antworten )
Antworten
Zu viele Anzeigen?Wenn Sie nur eine Datei drucken möchten double
mit zwei Nachkommastellen, verwenden Sie etwas wie dieses:
double value = 200.3456;
System.out.printf("Value: %.2f", value);
Wenn Sie das Ergebnis in einer String
nicht auf der Konsole ausgegeben wird, verwenden Sie String.format()
mit den gleichen Argumenten:
String result = String.format("%.2f", value);
Oder verwenden Sie die Klasse DecimalFormat
:
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
Am einfachsten ist es, wenn Sie einen Trick wie diesen anwenden;
double val = ....;
val = val*100;
val = Math.round(val);
val = val /100;
Wenn der Wert bei 200,3456 beginnt, geht er bis 20034,56 und wird dann auf 20035 gerundet, um 200,34 zu erhalten.
wenn Sie immer abrunden wollten, könnten wir immer abschneiden, indem wir in eine int:
double val = ....;
val = val*100;
val = (double)((int) val);
val = val /100;
Diese Technik wird in den meisten Fällen funktionieren, da sie bei sehr großen Doubles (positiv oder negativ) zu einem Überlauf führen kann, aber wenn Sie wissen, dass Ihre Werte in einem angemessenen Bereich liegen, sollte dies für Sie funktionieren.
Bitte verwenden Sie Apache commons math :
Precision.round(10.4567, 2)
function Double round2(Double val) {
return new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue();
}
Beachten Sie die toString()!!!!
Das liegt daran, dass BigDecimal die exakte Binärform des Double umwandelt!!!
Dies sind die verschiedenen vorgeschlagenen Methoden und ihre Fehlerquellen.
// Always Good!
new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue()
Double val = 260.775d; //EXPECTED 260.78
260.77 - WRONG - new BigDecimal(val).setScale(2,RoundingMode.HALF_UP).doubleValue()
Double val = 260.775d; //EXPECTED 260.78
260.77 - TRY AGAIN - Math.round(val * 100.d) / 100.0d
Double val = 256.025d; //EXPECTED 256.03d
256.02 - OOPS - new DecimalFormat("0.00").format(val)
// By default use half even, works if you change mode to half_up
Double val = 256.025d; //EXPECTED 256.03d
256.02 - FAIL - (int)(val * 100 + 0.5) / 100.0;
- See previous answers
- Weitere Antworten anzeigen