2016-06-10 7 views
2

Ich habe ein Double: 5096,54 Ich muss es formatieren als: 5.096,54 (europäisches Format für Währung) Ich versuche mit diesem Code ohne Erfolg.Wie man eine Nummer für europäische Sprache formatiert

Locale l = Locale.getDefault(); // ("fr" in my case) 
// Get the formatter for the specific locale 
NumberFormat formatter = NumberFormat.getNumberInstance(l); 

// Always 2 decimals 
formatter.setMinimumFractionDigits(2); 
formatter.setMaximumFractionDigits(2); 

// Format 
return formatter.format(d); 

Ausgang: 5 096,54 wenn ich erwarte 5.096,54 Jede Idee, warum es nicht funktioniert?

+0

meisten europäischen Formate Raum als Tausendertrennzeichen und Koma als Dezimaltrennzeichen ... aber Sie können versuchen, Italienisch oder Norwegisch Gebietsschema – Selvin

+0

http://ideone.com/IHc6ID https://docs.oracle.com/cd/E19455-01/806-0169/overview- 9/index.html – Selvin

+0

Vielen Dank für die Hilfe, die Verwirrung kommt von der Tatsache, dass das Gebietsschema "fr" FRANZÖSISCH ist (und die Ausgabe ist e. g: 5 096,54), aber in Belgien, französisch soll es 5.096,54 sein. Also, mein Locale auf 'Locale l = new Locale ("fr", "BE");' habe mein Problem behoben – estoke

Antwort

0

Es ist für mich mit dem spanischen locale arbeiten:

Double d = 5096.54; 

    Locale l = Locale.getDefault(); 

    NumberFormat formatter = NumberFormat.getNumberInstance(l); 

    formatter.setMinimumFractionDigits(2); 
    formatter.setMaximumFractionDigits(2); 

    String d1 = formatter.format(d); 

Ergebnis: 5.096,54

Es scheint das Französisch locale Verwendung etwas, das als Tausenderscheider wie ein Raum aussieht, können Sie dies überprüfen Frage:

Java FRANCE/FRENCH Locale thousands separator looks like space but not actually

sie fixieren es mit dieser Problemumgehung:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE); 
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); 
char thousandSep = symbols.getGroupingSeparator(); 

input =input.replace(thousandSep, '.'); 

können Sie entweder die gleiche Abhilfe verwenden oder die spanische Locale (oder irgendein andere, die mit Ihren Bedürfnissen entsprechen) verwenden

0

Sie könnten die folgenden Aktionen ausführen:

Locale l = Locale.getDefault(); 
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(l); 

DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); 
symbols.setGroupingSeparator('.'); // setting the thousand separator 
// symbols.setDecimalSeparator(','); optionally setting the decimal separator 

formatter.setDecimalFormatSymbols(symbols); 
formatter.setMinimumFractionDigits(2); 
formatter.setMaximumFractionDigits(2); 

String formattedString = formatter.format(yourDouble);