Cómo cambiar el separador decimal de DecimalFormat de coma a punto / punto?

Tengo este pequeño método loco que convierte los valores de BigDecimal en cuerdas 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 denominado 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 pista de cómo lograr esta pequeña hazaña?

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

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

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

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

También puede utilizar 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); 
 public String getGermanCurrencyFormat(double value) { NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); nf.setGroupingUsed(true); return "€ " + nf.format(value); } 

Europa es bastante grande. No estoy seguro si usan el mismo formato por todas partes. Sin embargo, esta o esta respuesta será 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, utilizar la configuración regional correcta.

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

BigDecimal no parece respetar los ajustes de la configuración regional.

 Locale.getDefault(); //returns sl_SI 

El idioma esloveno debe tener una coma decimal. Supongo que tenía extrañas concepciones erróneas 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 tiene sentido, ya que resultó ser debido al error humano (se olvidó de confirmar los datos y estaba mirando la cosa equivocada).

Lo mismo que BigDecimal puede decirse de cualquier función Java .toString (). Supongo que eso es bueno de alguna manera. Serialización por ejemplo o depuración. Hay una representación de cadena única.

También como otros mencionados usando formateadores funciona bien. Simplemente utilice formateadores, lo mismo para el frontend JSF, los formateadores hacen el trabajo correctamente y son conscientes de la configuración regional.

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; } } 
  • Findviewbyid devuelve null en un diálogo
  • ASyncTask en Executor y PriorityBlockingQueue
  • ¿Cómo se activa una entrada de micrófono en el emulador de Android
  • ¿Cómo saber si una coordenada X e Y están dentro de mi botón?
  • Los caracteres árabes en String.Format ("% d", 1, Locale.US)
  • ¿Por qué sólo el subproceso de interfaz de usuario en Android puede actualizar la interfaz de usuario?
  • Error de ejecución para la tarea ': app: transformClassesWithJarMergingForDebug
  • Cómo hacer que el móvil se vaya durmiendo programáticamente
  • JSON Serialización desde URL siempre devuelve NULL
  • Java Array lista sincronización si está escrito en un hilo y leído en otro
  • ScrollView alawys desplazándose hacia abajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.