2011-01-17 11 views
38

Biorąc pod uwagę java.text.NumberFormat lokalizacji:Separator dziesiętny w numberFormat

NumberFormat numberFormat = NumberFormat.getInstance(); 

Jak mogę uzyskać znak używany jako separator dziesiętny (jeśli jest to przecinek lub punkt), w tym NUMBERFORMAT? Jak mogę zmodyfikować tę właściwość bez konieczności korzystania z nowego formatu DecimalFormat?

Dzięki

Odpowiedz

66

klasy pomocnika DecimalFomatSymbols jest to, czego szukasz:

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

aby cię symboli w zależności od potrzeb:

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

EDIT: ta odpowiedź jest ważna tylko dla DecimalFormat, a nie dla NumberFormat zgodnie z wymaganiami w pytaniu. W każdym razie, ponieważ może to pomóc autorowi, wpuszczę to tutaj.

+0

Dla rekordu Numberformat jest klasą abstrakcyjną, więc prawdopodobnie i tak będziesz miał obiekt DecimalFormat. – redcalx

+1

@locster: implementacja 'DecimalFormat' lub' ChoiceFormat' lub nieudokumentowana implementacja JDK-private 'NumberFormat' lub ... –

+18

Dla rekordu ta linia _DecimalFormat format = DecimalFormat.getInstance(); _ nie skompiluj jako metodę getInstance() zwraca obiekt NumberFormat. – Chexpir

2

Jeśli instancja NumberFormat jest DecimalFormat, a następnie można użyć getDecimalFormatSymbols() aby dostać się do tych informacji.

Ogólnie rzecz biorąc, nie można uzyskać dostępu do tych informacji.

Dlaczego tego potrzebujesz?

+1

Chcę umożliwić użytkownikowi użycie przecinka lub kropki jako separatora dziesiętnego, więc muszę zastąpić przecinki przecinkami lub punktami w zależności od używanych ustawień narodowych. – Javi

+0

Dobra uwaga. Przeoczyłem, że używał NumberFormat, a nie DecimalFormat. –

+0

Można ustawić domyślne symbole dziesiętne dla symboli narodowych. –

5

zgadzam się z biziclop i Joachim Sauer że brudząc z przecinku i grupowanie separatorów i robi tę pracę ręcznie, może spowodować wiele problemów. Użycie parametru locale w metodzie getInstance wykonuje całą pracę automatycznie. I możesz łatwo wyłączyć tysiąc separatora grupowania, jeśli chcesz.

Poniższa metoda testu jednoczęściowego (która przechodzi) pokazuje to zachowanie w oparciu o język angielski i niemiecki.

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 
} 
Powiązane problemy