8 Stimmen

Warum folgt das Dezimaltrennzeichen in Java der Sprache des Gebietsschemas und nicht dem Land, und, was noch wichtiger ist, wie kann man es außer Kraft setzen?

Ich arbeite an einem internationalen Projekt und habe festgestellt, dass in Java die Wahl des Dezimaltrennzeichens von der Sprache des Gebietsschemas abhängt, nicht von dessen Land. Zum Beispiel:

DecimalFormat currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale("it","IT"));
System.out.println(currencyFormatter.format(-123456.78));

currencyFormatter = (DecimalFormat) NumberFormat.getInstance(new Locale("en","IT"));
System.out.println(currencyFormatter.format(-123456.78));

ergibt die folgende Ausgabe:

-123.456,78
-123,456.78

Ich hätte erwartet, dass es sich nach dem Land richtet, denn wenn ich mich in dem Land befinde, egal ob ich Englisch oder Italienisch spreche, werden die Zahlen in diesem Land mit dem Dezimaltrennzeichen als Komma geschrieben.

Meine Frage ist eine doppelte:

  1. Weiß jemand, warum dieses Verhalten der Sprache folgt?
  2. Was noch wichtiger ist: Kann mir jemand sagen, wie ich das Standardverhalten in Java ändern kann, um stattdessen der Sprache zu folgen?

Danke.

0voto

chenson42 Punkte 1078

Ich denke, Sie könnten in der Lage sein, das NumberFormat Verhalten pro Locale zu überschreiben mit LocaleServiceProvider . Dies würde allerdings Java 6 erfordern ...

0voto

cquezel Punkte 3043

Ich hätte erwartet, dass es sich nach dem Land richtet, denn wenn ich mich in dem Land befinde, egal ob ich Englisch oder Italienisch spreche, werden die Zahlen in diesem Land mit dem Dezimaltrennzeichen als Komma geschrieben.

Nein. Einige Länder mit mehreren Amtssprachen wie Kanada (zwei Amtssprachen) haben je nach Sprache unterschiedliche Formatierungskonventionen:

-1 234,56 (Locale.CANADA_FRENCH)
-1,234.56 (Locale.CANADA (should probably be named CANADA_ENGLISH))

0voto

Matt Punkte 11307

Wie bereits erwähnt, liegt das Problem höchstwahrscheinlich darin, dass Java Ihre exakte Lokalisierung nicht finden kann und daher das verwendet, was ihm am nächsten liegt. Wenn Sie ein DecimalFormat-Objekt haben, können Sie die Trennzeichen manuell ändern, wenn Sie möchten.

DecimalFormat format = ...;
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
format.setDecimalFormatSymbols(symbols);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X