2011-03-16 35 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));