Runden mit Java

Hallo,

ich würde gerne ein bestimmtes Rundungsverhalten implementieren.

Grundsätzlich geht es darum Preise bestimmt zu runden. Der User kann zum Beispiel angeben ob auf die am “nächsten” 10ct, 25ct, 50ct etc gerundet werden soll.
Beispiel: Wenn 25ct ausgewählt ist, dann soll 0,25-0,375 zu 0,25 gerundet werden 0,375-0,5 zu 0,5 gerundet werden.
Das hier habe ich zurzeit:

double price = Math.ceil(preis* rundung)/rundung;

Jemand eine Idee wie ich das jetzt umbauen muss, damit er nicht immer aufrundet, sondern entweder auf oder abrundet ?

Math.round() nehmen?

der alte Trick der auch beim normalen Runden funktioniert:
minus halben Betrag, minus 0.125, und dann aufrunden

(edit: Vorsicht bei den Grenzen, und 0 wird auf -0 gerundet…, andersrum wohl geeigneter, sollte ich mir besser für Vorschäge merken, Math.round macht:

    public static long round(double a) {
	return (long)floor(a + 0.5d);
    }
``` )

aber falls du diese Richtung verfolgst, wage nicht, Double.parseDouble(this.SettingResult[2].toString()) noch ein zweites Mal mitten reinzuschreiben,
so schon schlimm genug

besser das erst einmal in eine Variable, die dann auch leicht durch 2 zu teilen

und 100/x/100 = 1/x ?
`//Bei 0.25 = 4, bei 0.5 = 2, bei 0.1 = 10` passt auch bei 1/x ;)
Vorsicht bei int, dann lieber 1.0/x, allgemein die sichere Variante, aber hier mit double geht es auch so

Wenn man mit Geld rechnet kommt man an [JAPI]BigDecimal[/JAPI] nicht vorbei, weil zb 0,1 binär ein unendlicher Bruch ist und daher mit einem [JAPI]double[/JAPI] nicht darstellbar ist.

Dafür kennt BigDecimal reichlich Rundungsmethoden…

bye
TT

Super danke euch, das hilft mir alles sehr weiter !

Mal wird (nur) abgerundet und mal auf? Bei immer sehr ähnlichen Beträgen wäre das für mindestens eine Seite sehr ungerecht, imho.

Btt: später