Rundung von float/double

Hallo,

Ich such gerade nach einer eleganten Lösung um float und/oder double Werte auf eine zu definierende Präzision zurunden. Ok, kann man selbst schreiben, doch all die einzelnen Fälle abzuhandeln ist nicht sehr schön :wink: ausserdem geh ich davon aus, dass es das bereits geben müsste, finds aber nicht :frowning:

Danke
Tgellan

Hallo Tagellan,

Dazu verwendest Du am besten BigDecimal:
http://www.rgagnon.com/javadetails/java-0016.html

Gruss, Simon

Hi,
wenn du java 1.5 hast, kannst java.util.Formatter verwenden. Ansonsten java.text.DecimalFormat

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, Super :wink:
Damit wirds dann wie folgt…

private double round (final double p\_value, final int p\_decimalPlace)
{ 
 BigDecimal l\_bd = new BigDecimal(p\_value);
 l\_bd = l\_bd.setScale(p\_decimalPlace, BigDecimal.ROUND\_HALF\_UP);
 return l\_bd.doubleValue();
}

Bis denne
Tgellan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Mars,

Den DecimalFormatter zu verwenden ist nicht wirklich die Lösung, da dieser fürs Formattieren in Strings oder parsen aus Strings da ist.
Also nicht zum runden.

Gruss, Simon

[OT] Du kommst nicht aus der Java-Welt, oder?
Ich frag nur von wegen Code Conventions. Egal wo ich bisher hingekommen bin, alle halten sich zumindest annähernd an die Conventions von Sun.

[Klugscheißermodus an :smile:]

Also keine Typisierung im Variablennamen :smile:
und auch keine Unterstriche
sondern sowas wie

precisionScale
roundedValue

Aber das nur nebenbei. Es erhöht halt für den „Durchschnittsjavaprogrammierer“ die Lesbarkeit, statt p_irgendwas

[Klugscheißermodus aus]

Michael

ja aber für was soll man den sonst runden?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Na zum Beispiel möchte man eine Berechnung auf zwei Stellen runden und dann so in der Datenbank speichern.

…oder man muss eine weitere Berechnung machen welche mit gerundeten Werten passieren soll.

…oder
…oder
…oder

Hallo Michael,

Nun es gibt auch Firmen welche noch andere Programmiersprachen ausser Java verwenden (z.B. C++) und diese haben dann in der Regel für beide „Welten“ dieselben Richtlinien.

Gruss, Simon

Wozu Big???

Einfach die Dezimalzahl mit 10^(nachkommastelle) multiplizieren, dann Math.round(dezimalzahl) benutzen und anschliessen durch 10^(nachkommastelle) dividieren.
Fertig ist das ganze…

etwa so:
double neueZahl = Math.round(alteZahl* 10^kommastelle) / 10^kommastelle;

Gruß Wizard of War