2011-03-16 160 views

回答

78

这应该工作(未经测试的基础上的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,第一行应该是cast保存大多数语言环境。

+15

未经测试的评论:getDecimalFormatSymbols()的Javadoc说:返回:所需的DecimalFormatSymbols的副本。所以你应该在修改副本后使用'setDecimalFormatSymbols(theCopy)'。 – 2011-09-05 22:43:23

+5

bd.longValue()的文档说“任何小数部分将被丢弃”。所以我不知道这是否是最好的方式来做到这一点,如果你关心精度 – codinguser 2012-07-17 19:29:50

+2

我想你可以使用'new'并将其设置回格式化程序: 'DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();' ' customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));' 'customSymbol.setGroupingSeparator(000Selector);' 'formatter.setDecimalFormatSymbols(customSymbol);' – 2014-08-05 09:50:53

39
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())); 
+0

thx。我需要将千位分隔符更改为空格(“”) – Funtime 2011-03-16 09:56:46

+0

我知道我需要使用DecimalFormatSymbols setGroupingSeparator,但我不知道如何将它应用于我的BigDecimal – Funtime 2011-03-16 10:07:21

+1

@Funtime:您不会“将它应用于您的BigDecimal ”。你用所需的属性构建一个NumberFormat对象,并用它来格式化你的BigDecimal。 BigDecimal只有一个指定的值,它不具有指定的格式。 – 2011-03-16 10:10:24

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

您可以使用带有“,”的格式函数; “

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

//str = 124,750 

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

docs

+4

如果我想使用'.'作为分隔符? – Enissay 2015-01-12 18:22:03

+0

由于我通常使用String.format,它对我来说是最好最简单的! – Ali 2015-04-21 12:22:33

+12

@Enissay用明确的语言环境调用'format()'('Local.US'已知使用','作为分隔符),然后用你的自定义分隔符替换',':String.format(Locale.US, “%,d”,n).replace(',','。')'。 – minipif 2015-05-26 00:30:22

9

尝试在巴西使用该代码格式化:

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" 
+2

你也试试这个,如果是JasperReports,强制格式正确: 'parameters.put(“REPORT_LOCALE”,new Locale(“pt”,“BR”));' 发送此参数给报告。 – dellasavia 2015-01-27 18:40:53

+0

这里的最佳答案。 – 2017-04-28 10:24:12

3

接受的答案,必须真正改变,否则不能正常工作。 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(符号);

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

它为我工作。谢谢 ! – 2015-06-03 13:05:22

+0

这将无法使用小数 – Price 2015-07-18 08:43:03

+1

当然它工作... – Gab 2015-07-18 18:00:47

0

对于小数

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