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; } } 
  • ¿Puedo obtener propiedades definidas en "gradle.properties" en JAVA STATEMENT?
  • Android Telegram App -> java.lang.UnsatisfiedLinkError: No se ha encontrado ninguna implementación para void
  • ¿Qué significa DetailedState.VERIFYING_POOR_LINK?
  • Depuración de archivos de compilación de Gradle en Intellij / Android Studio
  • Uso de Eclipse para androidSDK, cuando voy a correr, me da la advertencia: La partición de datos ya está en uso. ¡Los cambios no persistirán!
  • ¿Hay alguna manera de llamar a código python en android desarrollar sin instalar sl4a?
  • Android: permite que un contacto no se edite en el teléfono
  • Evitar el reemplazo del método en tiempo de ejecución en Java
  • Intenta invocar el método virtual 'android.text.Editable android.widget.EditText.getText ()' en una referencia de objeto nulo
  • Observable / Observador Android
  • ¿Por qué no se actualiza mi widget de aplicación en API 3 o 4?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.