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 idea de cómo lograr esta pequeña hazaña?
He leído esto y, en particular, esto hasta la muerte, 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? Quizás incluso una solución que represente diferentes representaciones de números locales, ya que la coma sería perfecta para los estándares europeos.
java
android
bigdecimal
decimal-point
decimalformat
MiraFayless
fuente
fuente
Respuestas:
Puede cambiar el separador configurando una configuración regional o utilizando los símbolos DecimalFormatSymbols .
Si desea que el separador de agrupación sea un punto, puede usar una configuración regional europea:
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:
currentLocale se puede obtener de Locale.getDefault () es decir:
fuente
String formatString = "#,###,###,##0.00";
ver docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html para la sintaxisLocale.UK
volverá1,567.90
y no 1.567,90NumberFormat.getNumberInstance()
puede ejecutarse de manera inusualmente lenta en algunos dispositivos Android 7. Una alternativa es laString.format()
que se ejecuta rápidamente. Ver stackoverflow.com/questions/2379221/java-currency-number-formatEuropa es bastante grande. No estoy seguro si usan el mismo formato por todas partes. Sin embargo, esta o esta respuesta será de ayuda.
Es decir, usar la configuración regional correcta.
fuente
fuente
BigDecimal no parece respetar la configuración regional.
La configuración regional eslovena debe tener una coma decimal. Supongo que tenía extraños conceptos erróneos con respecto a los números.
He editado una parte de mi mensaje que no tenía sentido, ya que resultó ser debido al error humano (olvidé confirmar los datos y estaba mirando lo incorrecto).
Lo mismo que BigDecimal se puede decir para cualquier función Java .toString (). Supongo que eso es bueno en algunos aspectos. Serialización por ejemplo o depuración. Hay una representación de cadena única.
Además, como otros mencionaron usando formateadores, funciona bien. Solo use formateadores, lo mismo para la interfaz JSF, los formateadores hacen el trabajo correctamente y conocen la configuración regional.
fuente
fuente