Maximale Anzahl an Zeichen eines formattierten double-Wert ermitteln.

Schnoogle

Mitglied
Hallo,

ich muss viele double-Werte in einer Schleife formatieren. Hierzu möchte ich ein DecimalFormat-Objekt vorhalten und wiederverwenden.

Wie kann ich denn ermitteln, wie groß ein double-Wert als String sein kann, damit ich einen StringBuffer erstellen und auch wiederverwenden kann.

Ist folgende Methode richtig?

Code:
final DecimalFormat decimalFormat = (DecimalFormat)DecimalFormat.getCurrencyInstance(Locale.GERMANY);
final DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(Locale.GERMANY);
decimalFormatSymbols.setNaN("");
decimalFormatSymbols.setInfinity("");
decimalFormat.setGroupingUsed(false);
decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);

final int maximumIntegerDigits = decimalFormat.getMaximumIntegerDigits();
final int maximumFractionDigits = decimalFormat.getMaximumFractionDigits();

final int capacity = 1 + maximumIntegerDigits + 1 + maximumFractionDigits;

Ich jeweils eine '1' für das Dezimaltrennzeichen und für das '-' bei negativen Werten ergänzt.
 
Zuletzt bearbeitet:

sheel

I love Asm
Hi

ob der Code korrekt ist weiß ich grad nicht, aber die Frage ist ja, wie formatierst du double-Werte?

Wenn sie immer komplett ausgeschrieben werden,
also auch für lange Zahlen nicht 1.23e-20 (also ca. 1.23*10^(-20)) oder so genommen wird,
dann wären es mit Komma usw. ingesamt 330 Stellen für die in Java verwendeten doubles (IEEE754, 64bit)

(es sind natürlich nicht 330 genau gespeicherte Ziffern in 64bit,
beim Extrembeispiel wären zuerst viel Nuller und nur am Schluss ein paar nicht-nullwertige Stellen.)
 

Schnoogle

Mitglied
Also ich habe es jetzt wie oben beschrieben implementiert. Ich habe aber mit setMaximumIntegerDigits die maximale Anzahl an Stellen vor dem Komma explizit auf 309 gesetzt, da ich mit double und nicht BigDeciamal arbeite. Durch die o. a. Formel ermittel ich die Kapazität für einen StringBuffer, den ich für das Formatieren vieler Double-Werte wiederverwende.
 

sheel

I love Asm
Hm ja?
Keiner hat was von BigDecimal gesagt, und wo das 309 herkommt ist mir auch unklar.
Bzw. ist das jetzt eine Frage gewesen?
 

Schnoogle

Mitglied
Nein, ich wollte nur das Thema beenden.

Das mit der 309 hab ich aus der Dokumentation der setMaximumIntegerDigits(int) Methode.