numberformat - numeros decimales en java
Separador decimal en NumberFormat (3)
Dada una configuración regional java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
¿Cómo puedo obtener el carácter utilizado como separador decimal (si es una coma o un punto) en ese formato de número? ¿Cómo puedo modificar esta propiedad sin tener que usar el nuevo formato DecimalFormat (formato)?
Gracias
Estoy de acuerdo con biziclop y con Joachim Sauer en que jugar con separadores decimales y agrupados y hacer este trabajo manualmente puede causar muchos problemas. El uso del parámetro de configuración regional en el método NumberFormat
getInstance realiza todo el trabajo automáticamente. Y puede deshabilitar fácilmente el separador de agrupación de mil, si lo desea.
El siguiente método de prueba junit (que pasa) muestra este comportamiento basado en 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
}
La clase auxiliar DecimalFomatSymbols es lo que está buscando:
DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();
Para establecer sus símbolos según sea necesario:
//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator('','');
format.setDecimalFormatSymbols(custom);
EDITAR: esta respuesta solo es válida para DecimalFormat
, y no para NumberFormat
como se requiere en la pregunta. De todos modos, ya que puede ayudar al autor, lo dejaré aquí.
Si su instancia de NumberFormat
es un DecimalFormat
, entonces puede usar getDecimalFormatSymbols()
para obtener esa información.
En general, no puedes acceder a esa información.
¿Por qué lo necesitas?