# DecimalFormat mit BigDecimal?



## Hackepeter (20. Aug 2012)

Hallo,

in meiner Anwendung arbeite ich mit sehr großen Zahlen, weshalb ich mit BigDecimal arbeite. Nun möchte ich die Zahlen ausgeben und zwar formatiert. 

DecimalFormat format = new DecimalFormat("0.00");

Das funktioniert nur mit Objekten die von der Klasse Number abgeleitet sind, also nicht mit meinem String. Für normale Datentypen sind die Zahlen zu groß, ich bin also auf BigDecimal angewiesen. Hat jemand eine Idee, wie ich so ein Objekt formatiert ausgeben kann? 

Am besten mit 1000er-Trennzeichen und einem Komma, statt einem Punkt für die Nachkommastellen.

Danke im Voraus!


----------



## Gast2 (20. Aug 2012)

BigDecimal erbt von Number


----------



## SlaterB (20. Aug 2012)

> also nicht mit meinem String. Für normale Datentypen sind die Zahlen zu groß, ich bin also auf BigDecimal angewiesen. 

ja wie nun, hast du String oder bereits BigDecimal? ungenau beschrieben,

a) wenn du BigDecimal hast dann mit DecimalFormat in einen String und fertig, mit deutscher Locale sieht es auch schick aus
b) wenn du einen String hast und dieser noch nicht ok ist, dann in der Tat auf BigDecimal/ Number wechseln und bei a) weiter,

für dieses 'Wechseln' mglw. auch wieder DecimalFormat, die parse-Methode gibt eine Number zurück,
hängt natürlich von deinen bisherigen Format ab, ob es geht oder nicht

edit:
übrigens vielleicht vorher selber runden,
bei mir kommt bei

```
BigDecimal a = new BigDecimal("23.345");
System.out.println(new DecimalFormat("0.00").format(a));
```
23,34 raus.., vielleicht aber in neueren Java-Versionen nicht mehr so schlimm


----------



## haui95 (20. Aug 2012)

Und dann noch mit Komma folgendes schreiben:


```
BigDecimal bd = new BigDecimal("23.345");
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance();
dfs.setDecimalSeparator(',');
DecimalFormat df = new DecimalFormat("0.00", dfs);
String formatOutput = df.format(bd)
```

Edit:


```
BigDecimal bd = new BigDecimal("23.345");
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance();
dfs.setGroupingSeparator(',');

DecimalFormat df = new DecimalFormat("###,###.##", dfs);
String formatOutput = df.format(bd.longValue()));
```

MfG


----------



## Hackepeter (20. Aug 2012)

Wow, dankeschön, das hat funktioniert! Oh man, irgendwie habe ich nicht gedacht, dass BigDecimal von Number erbt, obwohl es natürlich Sinn macht. Wie bescheuert... Dankeschön!


----------



## Spacerat (20. Aug 2012)

SlaterB hat gesagt.:


> edit:
> übrigens vielleicht vorher selber runden,
> bei mir kommt bei
> 
> ...


Das ist so und bleibt so, DecimalFormat verwendet RoundingMode.HALF_EVEN per default. 
"per default" heisst aber, das man's eintellen kann, z.B. auf RoundingMode.HALF_UP. Zumindest braucht man vorher nicht selber runden, das wär ja auch was. Wozu würde man denn DecimalFormat sonst noch benötigen? So'n paar lächerliche Trennzeichen bekäme man nach dem expliziten Runden auch noch selber hin.


----------



## SlaterB (20. Aug 2012)

ach ja, eigentlich logisch wie überall, da setzt aber irgendwie mein Verstand aus bei all den Einstellmöglichkeiten,
zumal abweichend von Math.round() usw.


----------

