602 Stimmen

Runden eines Double auf 2 Dezimalstellen

Wenn der Wert 200.3456 sollte sie wie folgt formatiert werden 200.34 . Wenn es 200 dann sollte es sein 200.00 .

398voto

Jesper Punkte 193903

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

153voto

Santiago Punkte 1467

Ich denke, das ist einfacher:

double time = 200.3456;
DecimalFormat df = new DecimalFormat("#.##");      
time = Double.valueOf(df.format(time));

System.out.println(time); // 200.35

Beachten Sie, dass dies tatsächlich die Rundung für Sie übernimmt, nicht nur die Formatierung.

96voto

luke Punkte 13862

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.

71voto

Pritesh Mhatre Punkte 3459

Bitte verwenden Sie Apache commons math :

Precision.round(10.4567, 2)

61voto

Luca Vix Punkte 686
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;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X