2011-01-17 8 views
38

ein locale java.text.NumberFormat Gegeben:Dezimaltrennzeichen in Number

NumberFormat numberFormat = NumberFormat.getInstance(); 

Wie kann ich den Charakter bekommen als Dezimaltrennzeichen verwendet (wenn es ein Komma oder ein Punkt ist) in diesem Number? Wie kann ich diese Eigenschaft ändern, ohne das neue DecimalFormat (Format) verwenden zu müssen?

Dank

Antwort

66

Die Hilfsklasse DecimalFomatSymbols ist, was Sie suchen:

DecimalFormat format=DecimalFormat.getInstance(); 
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols(); 
char sep=symbols.getDecimalSeparator(); 

Sie Symbole So stellen je nach Bedarf:

//create a new instance 
DecimalFormatSymbols custom=new DecimalFormatSymbols(); 
custom.setDecimalSeparator(','); 
format.setDecimalFormatSymbols(custom); 

EDIT: diese Antwort ist nur gültig, für DecimalFormat, und nicht für NumberFormat wie in der Frage erforderlich. Wie auch immer, da es dem Autor helfen kann, werde ich es hier lassen.

+0

Für den Datensatz ist Numberformat eine abstrakte Klasse, so dass Sie wahrscheinlich sowieso ein DecimalFormat-Objekt haben. – redcalx

+1

@occster: Entweder ein 'DecimalFormat' oder ein' ChoiceFormat' oder eine undokumentierte JDK-private 'NumberFormat' Implementierung oder ... –

+18

Für den Datensatz ist diese Zeile _DecimalFormat Format = DecimalFormat.getInstance(); _ nicht Kompilieren, da die Methode getInstance() ein NumberFormat-Objekt zurückgibt. – Chexpir

2

Wenn Ihre NumberFormat Instanz ein DecimalFormat ist, dann können Sie getDecimalFormatSymbols() verwenden, um diese Informationen zu erhalten.

Im Allgemeinen können Sie nicht auf diese Informationen zugreifen.

Warum brauchen Sie es?

+1

Ich möchte dem Benutzer ermöglichen, entweder Komma oder Punkt als Dezimaltrennzeichen zu verwenden, also muss ich Kommas durch Punkte oder Punkte mit Kommas ersetzen, abhängig von der verwendeten Ländereinstellung. – Javi

+0

Guter Punkt. Ich habe übersehen, dass er NumberFormat und nicht DecimalFormat verwendet. –

+0

Sie können die standardmäßigen DecimalFormatSymbols für das Gebietsschema festlegen. –

5

Ich stimme mit biziclop und Joachim Sauer dass mit dezimal Messing und Gruppierungs Separatoren und diese Arbeit manuell zu tun, eine Menge Probleme verursachen kann. Die Verwendung des Gebietsschema-Parameters in der NumberFormat getInstance-Methode erledigt automatisch alle Aufgaben für Sie. Und Sie können das Tausendergruppentrennzeichen leicht deaktivieren, wenn Sie es wünschen.

Die folgende Junit-Testmethode (die besteht) zeigt dieses Verhalten basierend auf dem englischen und deutschen Gebietsschema.

public void testFormatter() { 
    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK); 
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true 

    formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN); 
    assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true 

    //and in case you want another decimal seperator for a specific locale 
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(); 
    decimalFormatSymbols.setDecimalSeparator('.'); 

    formatter.setDecimalFormatSymbols(decimalFormatSymbols); 
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true 
}