# Problem: Double als Geldbetrag - Rundungsfehler



## TheJT (20. Sep 2009)

Hallo liebe Community,
ich habe folgendes Problem:
Ich will mit Geldbeträgen rechnen. Also verwende ich eine double, da ich ja auch mit Centbeträgen rechnen will.
Double liefert allerdings immer nur Näherungswerte!

```
System.out.println(247.26 - 100.00);
```
liefert mir 47.25999999999999
Wenn ich jetzt eine Möglichkeit finden würde das ganze auf 47.26, also auf 2 Stellen hinter dem Komma zu runden, wäre das super. Allerdings habe ich bisher noch nichts gefunden, was funktioniert. Leider.
Sämmtliche Tipps wie mit 2 multiplizieren und dann wieder durch 2 dividieren dunktionieren nicht. Und math.round killt mir einfach die Kommastellen auf 0. Das ist auch nicht der Sinn der Sache


----------



## Marco13 (20. Sep 2009)

Es gibt nur eine (IMHO praktikable, d.h. nicht auf BigDecimal aufbauende) Möglichkeit, das vernünftig zu machen: Long verwenden und mit cent rechnen. Selbst wenn man den Betrag gerundet ausgibt: Die Zahl 0.1 kann nicht als double dargestellt werden. (<- Punkt - daran gibt's nicht zu rütteln).


----------



## TheJT (20. Sep 2009)

Hallo,
danke! Das löst das Problem natürlich. Aber ich finde das schon ziemlich schwach von Java, wenn man so ausweichen muss, dass man einen Geldbetrag als long und nicht als double darstellen muss.


----------



## faetzminator (20. Sep 2009)

long ist halt long. Egal ob du in Java, in C, in C++, ... programmierst.


----------



## Landei (20. Sep 2009)

Na ja, bei Umrechnungskursen und so kommen auch Bruchteile von Cents vor, so dass man manchmal um BigDecimal nicht herumkommt. Float oder Double ist jedenfalls für "Geld" total ungeeignet.


----------



## maki (20. Sep 2009)

TheJT hat gesagt.:


> Hallo,
> danke! Das löst das Problem natürlich. Aber ich finde das schon ziemlich schwach von Java, wenn man so ausweichen muss, dass man einen Geldbetrag als long und nicht als double darstellen muss.


Fliesskommazahlen für Geldbeträge sind immer voll daneben, lies dich mal in die Materie ein.
Kennst du eine Programmiersprache die von Haus aus mit einem "Money" Typen kommt?
Ich nicht, aber genau so einen Datentypen bräuchte man, zum Glück kann man den ja selbermachen. (<- Wink mit dem Scheunentor)


----------

