separar separador puntos punto por poner numeros miles mil decimales como coma colocar cambiar java android bigdecimal decimal-point decimalformat

java - puntos - separador de miles android



¿Cómo cambiar el separador decimal de DecimalFormat de coma a punto/punto? (6)

Simplemente reemplace ''.'' con '','' en el extremo de la interfaz de usuario

import java.text.DecimalFormat; public MyClass{ private String netAmount; private static DecimalFormat twoDecimalForm = new DecimalFormat("00.00"); public MyClass(double amount){ //converting to required decimal format in constructor or/and setter this.amount=twoDecimalForm.format(amount); } public String getAmount() { //replacing decimal point with comma so that in JSP ELs you''ll get it in comma format return amount.replace(".",","); } public void setAmount(String amount) { this.amount = amount; } }

Tengo este pequeño método loco que convierte los valores de BigDecimal en cadenas agradables y legibles.

private String formatBigDecimal(BigDecimal bd){ DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(3); df.setMaximumFractionDigits(3); df.setMinimumIntegerDigits(1); df.setMaximumIntegerDigits(3); df.setGroupingSize(20); return df.format(bd); }

Sin embargo, también produce un llamado separador de agrupación "," que hace que todos mis valores salgan así:

xxx,xxx

Necesito que el separador sea un punto o un punto y no una coma. ¿Alguien tiene una idea de cómo lograr esta pequeña hazaña?

He leído this y en particular this hasta la muerte ahora, pero no puedo encontrar una manera de hacerlo. ¿Me estoy acercando a esto de la manera incorrecta? ¿Hay una manera mucho más elegante de hacer esto? Tal vez incluso una solución que represente diferentes representaciones de números locales, ya que la coma sería perfecta para los estándares europeos.


BigDecimal no parece respetar la configuración regional.

Locale.getDefault(); //returns sl_SI

La configuración regional eslovena debería tener una coma decimal. Supongo que tenía extraños conceptos erróneos con respecto a los números.

a = new BigDecimal("1,2") //throws exception a = new BigDecimal("1.2") //is ok a.toPlainString() // returns "1.2" always

He editado una parte de mi mensaje que no tenía sentido ya que resultó ser debido al error humano (se olvidó de confirmar los datos y estaba buscando algo incorrecto).

Igual que BigDecimal se puede decir para cualquier función Java .toString (). Creo que eso es bueno de alguna manera. Serialización por ejemplo o depuración. Hay una representación de cadena única.

Además, como otros mencionaron el uso de formateadores funciona bien. Simplemente use formateadores, lo mismo para la interfaz JSF, los formateadores hacen el trabajo correctamente y conocen la configuración regional.


Europa es bastante grande No estoy seguro si usan el mismo formato por todas partes. Sin embargo, this o this respuesta serán de ayuda.

String text = "1,234567"; NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY); double val = nf_in.parse(text).doubleValue(); NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK); nf_out.setMaximumFractionDigits(3); String output = nf_out.format(val);

Es decir, use la configuración correcta.


Puede cambiar el separador configurando una configuración regional o utilizando los DecimalFormatSymbols .

Si desea que el separador de agrupación sea un punto, puede usar una configuración regional europea:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf;

Alternativamente, puede usar la clase DecimalFormatSymbols para cambiar los símbolos que aparecen en los números formateados producidos por el método de formato. Estos símbolos incluyen el separador decimal, el separador de agrupación, el signo menos y el signo de porcentaje, entre otros:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator('',''); otherSymbols.setGroupingSeparator(''.''); DecimalFormat df = new DecimalFormat(formatString, otherSymbols);

currentLocale se puede obtener de Locale.getDefault () es decir:

Locale currentLocale = Locale.getDefault();


String money = output.replace('','', ''.'');


public String getGermanCurrencyFormat(double value) { NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); nf.setGroupingUsed(true); return "€ " + nf.format(value); }