首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Merlin 國際化利器:NumberFormat、DecimalFormat、ChoiceFormat 與 Currency 完全掌握

     編輯:Java 相關知識

NumberFormat:數值格式化基類

java.text.NumberFormat 抽象類提供與地區無關的數值/貨幣/百分比格式化。五大工廠方法獲取地區化實例:

  • getCurrencyInstance():貨幣
  • getInstance()/getNumberInstance():通用數值
  • getIntegerInstance():整數 (J2SE 1.4 新增)
  • getPercentInstance():百分比

各方法提供無參(當前地區)與 Locale 參數版本。範例:54321 在美國 (54,321) 與德國 (54.321) 顯示差異。

NumberFormat us = NumberFormat.getIntegerInstance(Locale.US);
NumberFormat de = NumberFormat.getIntegerInstance(Locale.GERMANY);
System.out.println(us.format(54321)); // 54,321
System.out.println(de.format(54321)); // 54.321

DecimalFormat:自定義數字模式

DecimalFormat 為 NumberFormat 具體子類,允許顯式指定字符模式控制正/負/小數/指數顯示。J2SE 1.4 新增 formatToCharacterIterator() 返回 AttributedCharacterIterator,可遍歷格式化輸出每字符屬性(整數、分組分隔符、百分號等)。範例:50.25 格式為百分比「5,025%」,迭代輸出每字符屬性 Map。

NumberFormat us = NumberFormat.getPercentInstance(Locale.US);
if (us instanceof DecimalFormat) {
  AttributedCharacterIterator iter = ((DecimalFormat)us).formatToCharacterIterator(new Double(50.25));
  for (char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) {
    System.out.println("Char: " + c + " / " + iter.getAttributes());
  }
}

ChoiceFormat:值區間映射文本

ChoiceFormat 將數值區間映射為文本,常與 MessageFormat 結合產生語言無關拼接訊息。範例:0→「is no content」、1→「is one item」、≥2→「are many items」。

double[] limits = {0,1,2};
String[] msgs = {"is no content","is one item","are many items"};
ChoiceFormat cf = new ChoiceFormat(limits, msgs);
MessageFormat mf = new MessageFormat("There {0}.");
mf.setFormats(new Format[]{cf});
for (int i=0;i<5;i++)
  System.out.println(i + ": " + mf.format(new Object[]{new Integer(i)}));

輸出:0→There is no content.、1→There is one item.、2-4→There are many items.

Currency:貨幣符號與代碼

J2SE 1.4 新增 java.util.Currency 類,對應 ISO 4217 貨幣代碼。NumberFormat.getCurrency()/setCurrency() 獲取/設置貨幣實例。Currency.getInstance(Locale) 或代碼字串獲取實例,getSymbol() 取符號。注意:直接獲取 Currency 實例的 getSymbol() 可能返回三字母代碼(如 EUR、GBP),而透過 NumberFormat.getCurrencyInstance() 格式化則顯示真實符號(€、£)。

Currency usd = Currency.getInstance("USD");
Currency gbp = Currency.getInstance(Locale.UK);
NumberFormat usFmt = NumberFormat.getCurrencyInstance(Locale.US);
NumberFormat deFmt = NumberFormat.getCurrencyInstance(Locale.GERMANY);
System.out.println(usFmt.format(5000.25)); // $5,000.25
System.out.println(deFmt.format(5000.25)); // 5.000,25 €

貨幣符號顯示示例

結語

軟體全球化不止文本本地化,數值/貨幣格式同樣關鍵。善用地區化 NumberFormat 實例,讓程式真正國際化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved