Tausender Trennzeichen DecimalFormat & NumberFormat

Varthor

Mitglied
Hallo zusammen,

ich sitze gerade an einem Programm welches eingegebene Zahlen formatiert,

beispielsweise

Eingabe: 1000000
Ausgabe: 1 Million

Eingabe: 123268
Ausgabe ca. 123.000

Mein Problem ist das anstatt dem oben gewünschten Punkt als tausender Trennzeichen ein Kommata steht.

Eingabe: 123268
Ausgabe ca. 123,000

Leider konnte ich mit DecimalFormat & NumberFormat keine Änderung des tausender Trennzeichens bewirken. Hat diesbezüglich jemand eine Idee?

Besten Dank
Varthor

Java:
 private String format(long number)  
{

 String result = "";
....

{
// Diverse Fallunterscheidungen (z.B. ob Million, soll gerundet werden etc.)

// Im Falle der Umrechnung erfolgt eine Formatierung der Eingabe 123268 auf 123000
// Es folgt die Ausgabenformatierung

DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.German);
 df.applyPattern("###,###.##");
result = df.format(number);

}

 return result;
}
 
Habe es gerade selber, unsauber gelöst.

Java:
       NumberFormat df = NumberFormat.getInstance(Locale.GERMAN);
        result = df.format(number).replace(",", ".");
Gibt es vlt. trotzdem eine Anregung warum obiges nicht funktioniert?
 
Java:
DecimalFormat df = (DecimalFormat) (DecimalFormat.getInstance( Locale.GERMAN ));
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
symbols.setGroupingSeparator( '.' );
df.setDecimalFormatSymbols( symbols );
// jetzt arbeitet df mit '.' als GroupingSeparator
Hat mich damals auch 'ne Weile gekostet, das rauszufinden :rtfm:
 
Zuletzt bearbeitet:
Ich weiß, die Antwort kommt jetzt vielleicht bisschen spät, aber besser ist:

Java:
Double yourDouble = 50000.23;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("###,###.00");
String result = df.format(yourDouble);

So würdest du noch die Nachkommastellen richtig angezeigt bekommen. Wenn die nicht interessieren, dann einfach im Pattern das .00 am Ende weglassen. Siehe auch hier für eine sehr ausführliche Darstellung der Formatierungsmöglichkeiten: https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
 
@tim danger Bei Deinem Code ist Dir aber ein Fehler unterlaufen - yourDouble ist bereits ein double und daher ist da kein parseDouble Aufruf mehr notwendig. Es reicht also direkt ein Aufruf von df.format mit dem Parameter yourDouble. Und dann willst Du mit der Rückgabe vom format Call noch irgendwas machen ...
 
Evtl. interessiert dich auch: https://github.com/allegro/tradukisto

Das haben Leute geschrieben, die sich damit auskennen. Hier mal ein Beispiel:

Java:
import pl.allegro.finance.tradukisto.MoneyConverters;
import pl.allegro.finance.tradukisto.ValueConverters;

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        ValueConverters converter = ValueConverters.GERMAN_INTEGER;
        String words = converter.asWords(123455);
        System.out.println("123455   = " + words);
        MoneyConverters germanBankingMoneyValue = MoneyConverters.GERMAN_BANKING_MONEY_VALUE;
        String words1 = germanBankingMoneyValue.asWords(BigDecimal.valueOf(321.05));
        System.out.println("321.05 e = " + words1);
    }
}

Code:
123455   = einhundertdreiundzwanzigtausendvierhundertfünfundfünfzig
321.05 e = dreihunderteinundzwanzig € 05/100

Wie so etwas grundsätzlich funktionieren kann, wird hier beschrieben: https://www.javatpoint.com/java-program-number-to-word

Finde ich immer besser, als selber etwas versuchen, schlecht umzusetzen.
 

Zurück
Oben