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í:
- Parcelable y herencia en Android
- Nombres de paquetes para dominios que terminan en .do
- No se puede detectar el número de llamada entrante utilizando BroadcastReceiver
- Eclipse ADT Error: No se puede ejecutar programa adb
- Al pasar argumentos Android DialogFragment, onCreateDialog agument paquete es inesperadamente nulo
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.
- Combinando enums de Java con sintaxis de puntos (enum.value1.value2)?
- Android: ¿Cómo obtener el color de fondo de Actividad en Java?
- Discurso a texto en Android
- Android: genera archivo CSV de valores de tabla
- Error de compilación de Maven para android Proyecto "error: paquete R no existe"
- ¿Cómo quitar sólo los espacios finales de una cadena en Java y mantener los espacios principales?
- No se puede crear una instancia del nombre de clase de tipo en cocos2d
- Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
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; } }
- Barra de herramientas y ActionBar contextual con AppCompat-v7
- Android Eclipse – No se pudo encontrar * .apk