2011-01-17 37 views
38

Dado un java.text.NumberFormat local:separador decimal en NumberFormat

NumberFormat numberFormat = NumberFormat.getInstance(); 

¿Cómo puedo obtener el carácter utilizado como separador decimal (si se trata de una coma o un punto) en la que NumberFormat? ¿Cómo puedo modificar esta propiedad sin tener que usar el nuevo DecimalFormat (formato)?

Gracias

Respuesta

66

La clase de ayuda DecimalFomatSymbols es lo que busca:

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

para establecer que los símbolos según sea necesario:

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

EDIT: esta respuesta sólo es válida para DecimalFormat, y no para NumberFormat como se requiere en la pregunta. De todos modos, como puede ayudar al autor, lo dejaré aquí.

+0

Para el registro, Numberformat es una clase abstracta, por lo que probablemente tenga un objeto DecimalFormat de todos modos. – redcalx

+1

@locster: ya sea un 'DecimalFormat' o un' ChoiceFormat' o una implementación 'NumberFormat' JDK privada no documentada o ... –

+18

Para el registro, esta línea _DecimalFormat format = DecimalFormat.getInstance(); _ no compilar como el método getInstance() devuelve un objeto NumberFormat. – Chexpir

2

Si su NumberFormat instancia es un DecimalFormat, entonces usted puede utilizar getDecimalFormatSymbols() para llegar a esa información.

En general, no se puede acceder a esa información.

¿Por qué lo necesitas?

+1

Quiero hacer posible que el usuario use coma o punto como separador decimal, por lo que necesito reemplazar las comas con puntos o puntos con comas, según la configuración regional utilizada. – Javi

+0

Buen punto. Pasé por alto que estaba usando NumberFormat y no DecimalFormat. –

+0

Puede establecer los DecimalFormatSymbols predeterminados para la configuración regional. –

5

Estoy de acuerdo con biziclop y Joachim Sauer que jugar con decimales y separadores de agrupamiento y hacer este trabajo de forma manual, puede causar muchos problemas. El uso del parámetro locale en el método getInstance NumberFormat hace todo el trabajo para usted automáticamente. Y puede desactivar fácilmente el separador de mil agrupaciones, si así lo desea.

El siguiente método de prueba junit (que pasa) muestra este comportamiento según la configuración regional en inglés y alemán.

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 
} 
Cuestiones relacionadas