2013-04-04 4 views
5

Ich verstehe nicht etwas in der NumberFormat, in US-Gebietsschema soll Komma (",") als Gruppentrennzeichen behandelt werden - für Tausende.Java NumberFormat, das Komma in US-Gebietsschema ignoriert?

Warum ignoriert es Kommas an falschen Stellen für dieses Gebietsschema?

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5,500").longValue()); //5500 
System.out.println(format.parse("550,0").longValue()); //5500 
System.out.println(format.parse("5500,").longValue()); //5500 

andere Ideen, wie String zu lange analysieren nach locale (dass die Eingabe von asumming „“ in falschen Stellen für das Gebietsschema ausfallen soll)?

+0

Was meinen Sie, wenn Sie * falschen Ort * sagen? Alle Aussagen in Ihrem Beispiel sind gültig. –

+0

Versuchen Sie 'format.setGroupingUsed (true)'. Macht es einen Unterschied? – Puce

+0

@Puce: Es ist standardmäßig 'true' für' Locale.US'. – Keppil

Antwort

0

Das Komma ist ein Platzhalter für das Gruppierungstrennzeichen und der Punkt ist ein Platzhalter für das Dezimaltrennzeichen.

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5.500").longValue()); //5 
System.out.println(format.parse("55.00").longValue()); //55 
System.out.println(format.parse("550.0").longValue()); //550 

Das Komma wird ignoriert, wie von der Präsentation ist. Der Vertrag, der für Tausende verwendet wird, ist üblich, hat jedoch während des Parsens keine Repräsentation. Deshalb heißt es Gruppentrenner nicht Tausende Separator. Sie könnten etwas wie 5,5.0,0, haben und es wird immer noch gültig sein.

Wie die Ziffern gruppiert sind, kann sich unterscheiden, manchmal ist es um 3 Ziffern einige Zeit um 2 oder kombiniert.

Logischerweise, wenn es nur Trennzeichen ist, das verwendet wird, um das Lesen von Menschen zu vereinfachen. Seine Position ändert den Wert der dargebotenen Zahl nicht, da sie weggelassen werden kann.


Die Analyse der Klasse java.text.DecimalFormat von Oracle implementiert zeigt, dass die Gruppierung Zeichen ignoriert werden.

1526 // Ignore grouping characters, if we are using them, but 
1527 // require that they be followed by a digit. Otherwise 
1528 // we backup and reprocess them. 

Weiteren Besuch Formatting Numeric Print Output

+1

Er sagt dies in der Frage, ich denke, er will das Parsen fehlschlagen, wenn das Komma drin ist der falsche Ort. – Keppil

+0

Er will das nicht, er will wissen, was nicht fällt. Ich habe dazu einen Kommentar hinzugefügt. –

+0

wie Keppil sagte, ich wollte, dass dies fehlschlägt, wenn die Gruppierung inkorrekt ist (abhängig vom Gebietsschema) - wenn es überhaupt möglich ist – Yoni

-1

Als Komma ist eine der Separator für Tausende in US Locale, es wird ignoriert, wenn es falsch platziert wird. Alle diese Ausgaben werden 5500.

+1

Er sagt dies in der Frage, ich denke, er will das Parsen versagen, wenn das Komma an der falschen Stelle ist. – Keppil

0

Wie javadev erwähnt, scheint die Parse-Methode nur tausend Trennzeichen zu ignorieren. Ich denke, Sie müssten eine Parse-Methode selbst implementieren (mit den Informationen des NumberFormat/DecimalFormat), wenn Sie striktes Parsing wollen.

Verwandte Themen