Double runden 2 Nachkommastellen

Hallo, ich versuche gerade einen double Wert auf 2 Nachkommastellen zu runden:

// mindestens 1 Vorkommastelle, genau 2 Nachkommastellen
DecimalFormat f = new DecimalFormat("#0.00");

double d1 = 1234.4843;
double d2 = 0.2;
System.out.println(f.format(d1));
System.out.println(f.format(d2));

Das Problem ist, das format wandelt den double Wert in einen String um. Ich bräuchte aber weiterhin einen double Wert.

Ein nachträgliches casten von String auf double erzeugt eine NumberFormat Exception.

Kann sein dass es unschön ist, aber ich mach es so:


double d1 = 1.123456;
d1 -= d1 % 0.01;
d1 *= 100d;
d1 = ((int)d1) / 100d;

double roundOff = Math.round(a * 100.0) / 100.0;

@Bene : Deins wird wohl nicht korrekt runden.

System.out.println(Math.round(1.1254567 * 100) / 100.0); so würde das schon funktionieren, aber verhält sich double * (double) 100 immer korrekt? S. bitte java.lang.Math.

Oh stimmt, ich “schneid” einfach nach der zweiten Stelle alles ab.

@Bene : du bräuchtest bei deiner Version anfangs nur 0.005 hinzuzählen, dann gehts auch.
Das Problem dabei; Solange man das “gerundete” noch mal durch irgend etwas teilen muss, können im Ergebnis wieder Rundungsfehler auftreten. Die sicherste Methode bietet da der Umweg über String-Format.

System.out.println(myDouble);
double d = Double.parseDouble(String.format(Locale.ENGLISH, "%1.2f", myDouble));
System.out.println(d);```

Ist zwar schon ein älterer Thread, trotzdem möchte ich hier mal zusammenfassend ergänzen:
https://wiki.byte-welt.net/wiki/Fließkommazahlen_mit_Java_runden