2011-01-17 32 views
38

Dato un java.text.NumberFormat locale:separatore decimale in NumberFormat

NumberFormat numberFormat = NumberFormat.getInstance(); 

Come posso ottenere il carattere utilizzato come separatore decimale (se si tratta di una virgola o un punto) in quanto numberformat? Come posso modificare questa proprietà senza dover usare il nuovo DecimalFormat (formato)?

Grazie

risposta

66

La classe helper DecimalFomatSymbols è quello che stai cercando:

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

per impostare i simboli in base alle esigenze:

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

EDIT: questa risposta è valido solo per DecimalFormat e non per NumberFormat come richiesto nella domanda. Comunque, come può aiutare l'autore, lo lascerò qui.

+0

Per la cronologia, Numberformat è una classe astratta, quindi probabilmente avrai comunque un oggetto DecimalFormat. – redcalx

+1

@locster: un 'DecimalFormat' o un' ChoiceFormat' o un'implementazione JDK-Number 'NumberFormat' non documentata o ... –

+18

Per la registrazione, questa riga _DecimalFormat format = DecimalFormat.getInstance(); _ non compilare come il metodo getInstance() restituisce un oggetto NumberFormat. – Chexpir

2

Se l'istanza NumberFormat è un DecimalFormat, quindi è possibile utilizzare getDecimalFormatSymbols() per arrivare a tali informazioni.

In generale, non è possibile ottenere tali informazioni.

Perché ne hai bisogno?

+1

Voglio rendere possibile all'utente l'uso di virgola o punto come separatore decimale, quindi ho bisogno di sostituire virgole con punti o punti con virgole a seconda delle impostazioni locali utilizzate. – Javi

+0

Buon punto. Ho trascurato che stava usando NumberFormat e non DecimalFormat. –

+0

È possibile impostare i DecimalFormatSymbols predefiniti per le impostazioni internazionali. –

5

Sono d'accordo con biziclop e Joachim Sauer che pasticciano con decimale e separatori di raggruppamento e di fare questo lavoro manualmente, può causare un sacco di problemi. L'uso del parametro locale nel metodo getInstance NumberFormat fa tutto il lavoro automaticamente. E puoi facilmente disabilitare il separatore di migliaia di gruppi, se lo desideri.

Il seguente metodo di test junit (che passa) mostra questo comportamento in base alle impostazioni internazionali inglese e tedesco.

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 
} 
Problemi correlati