Stefan Alt: Kaufmänisch Rounden

Hallo,

ich möchte einen double Wert bis auf zweit Nachkommastellen runden.
Kann mir einer sagen wie das geht?
So habe ich es probiert. Klappt aber nicht!!!

public double dem(double pd_DEMEntSumme)
   {
     pd_newDEM = pd_euro * pd_DEMEntSumme;
     Math.round(pd_newDEM);
     ps_dem = String.valueOf(pd_newDEM);

return pd_newDEM;
   }

  1. Hallo Stefan,

    ein Posting hätte doch genügt :-)
    Der vorgegebene Quelltext sagt mir erstmal nicht soviel. Jedenfalls erkenne ich keinen Ansatz, auf 2 Nachkommastellen runden zu wollen. Man kann also nicht von einem Fehler reden.

    Hier ein Codeschnipsel, welches Dir helfen sollte:
    ...
    double anfangswert; // Wert, welcher gerundet werden soll
    double ergebnis; // Hier wird dann das Ergebnis gespeichert
    ...
    ergebnis = Math.round(anfangswert*100)/100.0;

    Erklärung:
    Math.round rundet immer auf die letzte Stelle vor dem Komma. Es soll aber auf zwei Stellen nach dem Komma gerundet werden. Deshalb verschieben wir vor dem Runden das Komma um zwei Stellen nach rechts (Multiplikation mit 100). Und dann schieben wir das Komma wieder zurück (Division mit 100).

    Gruß
       Michael

  2. public double dem(double pd_DEMEntSumme)
       {
         pd_newDEM = pd_euro * pd_DEMEntSumme;
         Math.round(pd_newDEM);
         ps_dem = String.valueOf(pd_newDEM);

    return pd_newDEM;
       }

    Nur so als Anmerkung: Wenn Du mit "richtigem" Geld rechnest, dann halte ich die Verwendung von "double" generell für Kamikaze, weil sich ggf. unbemerkt Rundungsfehler akkumulieren können.
    Wer merkt schon, wenn ihm am Ende ein Pfennig fehlt? (Und wenn man eine Bank ist und viiiiele solcher Transaktionen macht ...)

    *Etwas* besser ist die Methode, Geldbeträge grundsätzlich ganzzahlig darzustellen (also DM-Beträge in Pfennigen zu rechnen).
    Das ist rundungsfehlerfrei, aber wiederum maschinenabhängig auf irgendeine Registerlänge etc. limitiert, führt also leicht zu Abstürzen oder (noch schlimmer) unbemerkten Überläufen.
    (2 Mrd Pfennige sind nämlich gar nicht sooo viel, wenn man es genau betrachtet - und noch schlimmer ist es, wenn man in Yen oder Lira denkt ...)

    Die einzige mir bekannte wirklich zuverlässige Methode ist die Verwendung von *Strings* und die Implementierung von Methoden für die benötigten Grundrechenarten. (Also letztlich die Definition eines eigenen Datentyps.)
    Mit einer Sprache wie Java sollte das prima zu machen sein.