2017-06-27 4 views
2

Ich habe ein merkwürdiges Verhalten, ich benutze ein DecimalFormat, um ein Doppel in einen Währungswert zu konvertieren und wird das Dezimaltrennzeichen ändern, aber es scheint, dass das Dezimaltrennzeichen auf jeden Fall ignoriert wird.Währungs-Dezimaltrennzeichen funktioniert nicht

class Currency { 
    public static void main (String... args) { 
    DecimalFormat nf =(DecimalFormat) DecimalFormat.getCurrencyInstance(Locale.getDefault()); 
    nf.setGroupingUsed(true); 

    DecimalFormatSymbols symbols = nf.getDecimalFormatSymbols(); 
    symbols.setGroupingSeparator(' '); 
    symbols.setCurrencySymbol("EUR"); 
    symbols.setDecimalSeparator('-'); 
    nf.setDecimalFormatSymbols(symbols); 

    System.out.println(nf.format(13000.31)); 
    } 
} 

so würde ich erwarten, dass das Ergebnis sein sollte: 13 000-31 EUR, wenn ich in einem Deutsch locale bin, wenn ich in einer US-locale bin sollte es EUR 13 000-31 sein. Aber was ich sehe, ist 13 000,31 EUR oder 13 000,31 EUR.

Es funktioniert gut mit dem Währungssymbol und mit dem Gruppierungstrennzeichen, aber das Dezimaltrennzeichen ignoriert in jedem Fall.

Hat jemand eine Idee warum ?! Dank

Antwort

4

Währung hat seinen individuellen Separator. Verwenden Sie setMonetaryDecimalSeparator.

+0

thx funktioniert, es funktioniert :) – dschmidt

4

Für Währungen gibt es ein zusätzliches Feld das Dezimaltrennzeichen zu setzen:

symbols.setMonetaryDecimalSeparator('-'); 
+0

thx, it :) – dschmidt

0

Sie sollten setMonetaryDecimalSeparator (https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormatSymbols.html#setMonetaryDecimalSeparator(char)) anstelle von setDecimalSeparator verwenden. Unten ist Ihr Code aktualisiert.

class Currency { 
    public static void main (String... args) { 
    DecimalFormat nf =(DecimalFormat) 
    DecimalFormat.getCurrencyInstance(Locale.getDefault()); 
    nf.setGroupingUsed(true); 

    DecimalFormatSymbols symbols = nf.getDecimalFormatSymbols(); 
    symbols.setGroupingSeparator(' '); 
    symbols.setCurrencySymbol("EUR"); 
    symbols.setMonetaryDecimalSeparator('-'); // ! 
    nf.setDecimalFormatSymbols(symbols); 

    System.out.println(nf.format(13000.31)); 
    } 
} 
+0

ein besonderer Grund, nur die Antwort zu wiederholen, die Dariusz und ich waren fast gleichzeitig veröffentlichen? –

Verwandte Themen