Como definir o separador de milhares em Java?
Eu tenho representação String de um BigDecimal que eu quero formatar com um separador de milhares e retornar como String.
Como definir o separador de milhares em Java?
Eu tenho representação String de um BigDecimal que eu quero formatar com um separador de milhares e retornar como String.
Respostas:
Isso deve funcionar (não testado, com base no JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
De acordo com o JavaDoc, o elenco na primeira linha deve ser salvo para a maioria das localidades.
getDecimalFormatSymbols()
diz: Returns: a copy of the desired DecimalFormatSymbols
. Então você deve usar setDecimalFormatSymbols(theCopy)
depois de alterar a cópia.
new
e configurá-lo novamente para o formatador: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Você pode usar a função de formatação com ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," inclui caracteres de agrupamento específicos do código do idioma.
.
como separador?
format()
com um local explícita ( Local.US
é conhecida a utilização ,
como um separador) e, em seguida, substituir ,
com o seu separador personalizado: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. Ou a long
. Ou a BigInteger
. E use f se quiser usar double
, float
ou BigDecimal
.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
EDITAR
Para obter um separador de agrupamento personalizado, como espaço, faça o seguinte:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
objeto com as propriedades desejadas e o usa para formatar o seu BigDecimal
. Um BigDecimal
tem apenas um valor especificado, não possui um formato especificado.
tente este código para formatar como usado no Brasil:
DecimalFormat df = new DecimalFormat(
"#,##0.00",
new DecimalFormatSymbols(new Locale("pt", "BR")));
BigDecimal value = new BigDecimal(123456.00);
System.out.println(df.format(value.floatValue()));
// results: "123.456,00"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
Envie este parâmetro para o relatório.
Se você estiver usando o separador de milhar para o tipo de dados Inteiro, use 1.
String.format ("%, d \ n", 58625) e a saída será 58.625
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');
String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);
String out = df.format(new BigDecimal(300000).doubleValue());
System.out.println(out);
A resposta aceita deve ser realmente alterada, caso contrário não funcionará. O getDecimalFormatSymbols faz uma cópia defensiva. Portanto,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
A nova linha é esta: formatter.setDecimalFormatSymbols (symbols);
Para decimais :
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
Como mencionado acima, o link a seguir fornece o código do país específico para permitir que o Java localize o número. Todo país tem seu próprio estilo.
No link acima, você encontrará o código do país que deve ser colocado aqui:
...(new Locale(<COUNTRY CODE HERE>));
A Suíça, por exemplo, formata os números da seguinte forma:
1000,00 -> 1'000,00
Para conseguir isso, os seguintes códigos funcionam para mim:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
O resultado é o esperado:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20