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í:
- OpenCV "Hello World" ejemplo para Android
- ¿Cómo recuperar una lista de fuentes disponibles / instaladas en android?
- Medir el tiempo transcurrido entre dos MotionEvents en Android
- Android - Leyendo las etiquetas ID3 de la secuencia mp3
- Convención de paquetes Java
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.
- Lanzar null pointerException en Timer.Schedule ();
- Ant depuración y liberación de hormigas falló
- ¿Hay alguna forma de desactivar javadoc se bloquea en Android Studio con Maven plugin?
- Crash Una aplicación que utiliza excepción en Android
- Leer un archivo pdf desde la carpeta de activos
- ScrollView alawys desplazándose hacia abajo
- Java.lang.RuntimeException: Error al entregar el resultado ResultInfo {who = null, request = 1, result = -1, data = intention} a la actividad
- En la API de GoogleCloudMessaging, ¿cómo manejar la renovación o caducidad del ID de registro?
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