簡體   English   中英

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

[英]How to set thousands separator in Java?

如何在 Java 中設置千位分隔符?
我有一個 BigDecimal 的字符串表示形式,我想用千位分隔符對其進行格式化並以字符串形式返回。

您可以使用帶有“,”的格式 function;

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

//str = 124,750

"," 包括特定於語言環境的分組字符。

文檔

這應該有效(未經測試,基於 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,第一行中的轉換應該保存在大多數語言環境中。

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"

如果您對 Integer 數據類型使用千位分隔符,請使用 1。

1. 對於 integer 數據類型

String.format("%,d\n", 58625)

Output:

58,625

2.對於浮點數據類型

String.format("%,.2f",58625.21)

Output:

58,625.21
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);

如上所述,以下鏈接為您提供了具體的國家代碼,以允許 Java 對號碼進行本地化。 每個國家都有自己的風格。

在上面的鏈接中,您將找到應在此處放置的國家/地區代碼:

...(new Locale(<COUNTRY CODE HERE>));

例如,瑞士將數字格式化如下:

1000.00 --> 1'000.00

國家代碼

為此,以下代碼適用於我:

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));

結果如預期:

1'000.00
public String formatStr(float val) {
 return String.format(Locale.CANADA, "%,.2f", val);
}

formatStr(2524.2) // 2,254.20



接受的答案必須真正改變,否則無法正常工作。 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));

使用下划線 ( _ ) 使代碼本身中的文字數值更具可讀性:

int example = 12_004_953; // Twelve million four thousand nine hundred fifty-three

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM