Eu tenho esse pequeno método maluco que converte valores BigDecimal em Strings agradáveis e legíveis.
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);
}
No entanto, também produz um chamado separador de agrupamento ","
que faz com que todos os meus valores saiam assim:
xxx,xxx
Eu preciso que o separador seja um ponto ou um ponto e não uma vírgula. Alguém tem alguma idéia de como realizar esse pequeno feito?
Eu li isso e, em particular, este à morte, mas agora não consigo encontrar uma maneira de conseguir este feito. Estou abordando isso da maneira errada? Existe uma maneira muito mais elegante de fazer isso? Talvez até uma solução que represente diferentes representações numéricas locais, já que a vírgula seria perfeita para os padrões europeus.
java
android
bigdecimal
decimal-point
decimalformat
MiraFayless
fonte
fonte
Respostas:
Você pode alterar o separador definindo um código de idioma ou usando o DecimalFormatSymbols .
Se você deseja que o separador de agrupamento seja um ponto, use um código de idioma europeu:
Como alternativa, você pode usar a classe DecimalFormatSymbols para alterar os símbolos que aparecem nos números formatados produzidos pelo método format. Esses símbolos incluem o separador decimal, o separador de agrupamento, o sinal de menos e o sinal de porcentagem, entre outros:
currentLocale pode ser obtido em Locale.getDefault () ou seja:
fonte
String formatString = "#,###,###,##0.00";
consulte docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html para sintaxeLocale.UK
retornará1,567.90
e não 1.567,90NumberFormat.getNumberInstance()
pode ser executado de maneira incomum e lenta em alguns dispositivos Android 7. Uma alternativa éString.format()
que é executado rapidamente. Consulte stackoverflow.com/questions/2379221/java-currency-number-formatA Europa é bem grande. Não tenho certeza se eles usam o mesmo formato todo. No entanto, esta ou esta resposta será útil.
Ou seja, use o local correto.
fonte
fonte
BigDecimal parece não respeitar as configurações de localidade.
O código de idioma esloveno deve ter uma vírgula decimal. Acho que eu tinha estranhos conceitos errados sobre números.
Eu editei uma parte da minha mensagem que não fazia sentido, pois provou ser devido ao erro humano (esqueci de confirmar os dados e estava olhando para a coisa errada).
O mesmo que BigDecimal pode ser dito para qualquer função Java .toString (). Eu acho que isso é bom em alguns aspectos. Serialização, por exemplo, ou depuração. Há uma representação de string exclusiva.
Além disso, como outros mencionados usando os formatadores, funciona bem. Basta usar os formatadores, o mesmo para o front-end JSF, os formatadores fazem o trabalho corretamente e estão cientes da localidade.
fonte
fonte