如何在Java中设置千位分隔符?

如何在Java中设置千位分隔符? 我有BigDecimal的string表示,我想设置千位分隔符并返回string。

这应该工作(未经testing,基于JavaDoc):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setGroupingSeparator(' '); formatter.setDecimalFormatSymbols(symbols); System.out.println(formatter.format(bd.longValue())); 

根据JavaDoc,在大多数语言环境中,第一行的转换应该被保存。

你可以用“,”来使用格式化function;

 int no = 124750; String str = String.format("%,d", no); //str = 124,750 

“,”包括特定于语言环境的分组字符。

文档

 BigDecimal bd = new BigDecimal(300000); NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US")); System.out.println(formatter.format(bd.longValue())); 

编辑

要获得自定义分组分隔符(如空格),请执行以下操作:

 DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(); symbols.setGroupingSeparator(' '); DecimalFormat formatter = new DecimalFormat("###,###.##", symbols); System.out.println(formatter.format(bd.longValue())); 

试试这个代码格式在巴西使用:

  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" 
 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); 

接受的答案必须真正改变,否则不工作。 getDecimalFormatSymbols使防御副本成为可能。 从而,

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setGroupingSeparator(' '); formatter.setDecimalFormatSymbols(symbols); System.out.println(formatter.format(bd.longValue())); 

新行是这一个: formatter.setDecimalFormatSymbols(symbols);

 NumberFormat nf = DecimalFormat.getInstance(myLocale); DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); customSymbol.setDecimalSeparator(','); customSymbol.setGroupingSeparator(' '); ((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol); nf.setGroupingUsed(true); 

对于小数

 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));