JavaTM 2 Platform
Standard Ed. 6

java.text
類別 NumberFormat

java.lang.Object
  繼承者 java.text.Format
      繼承者 java.text.NumberFormat
所有已實作的介面:
Serializable, Cloneable
直接已知子類別:
ChoiceFormat, DecimalFormat

public abstract class NumberFormat
extends Format

NumberFormat 是所有數值格式的抽象基礎類別。此類別提供格式化和解析數值的介面。NumberFormat 還提供了一些方法來確定哪些語言環境具有數值格式,以及它們的名稱是什麼。

NumberFormat 可用於格式化和解析任何語言環境的數值。使程式碼能夠完全獨立於小數點、千位分隔符甚至所用特定小數位數的語言環境約定,並與數值格式是否為偶小數無關。

若要格式化當前 Locale 的數值,可使用其中一個處理器類別方法:

  myString = NumberFormat.getInstance().format(myNumber);
 
如果格式化多個數值,那麼獲取該格式並多次使用它是更為高效的做法,這樣系統就不必多次獲取關於語言環境語言和國家/地區約定的資訊了。
 NumberFormat nf = NumberFormat.getInstance();
 for (int i = 0; i < myNumber.length; ++i) {
     output.println(nf.format(myNumber[i]) + "; ");
 }
 
若要格式化不同 Locale 的日期,可在對 getInstance 的調用中指定它。
 NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
 
還可以使用 NumberFormat 來解析數值:
 myNumber = nf.parse(myString);
 
使用 getInstancegetNumberInstance 來獲取常規數值格式。使用 getIntegerInstance 來獲取整數數值格式。使用 getCurrencyInstance 來獲取貨幣數值格式。使用 getPercentInstance 來獲取顯示百分比的格式。使用此格式,小數 0.53 將顯示為 53%。

使用 setMinimumFractionDigits 之類別的方法還可以控制數值的顯示。如果想對格式化和解析進行更多的控制(或者給予使用者更多的控制),可以嘗試將從處理器方法獲取的 NumberFormat 強制轉換為 DecimalFormat。這適用於大多數語言環境;只是要記住將其放入一個 try 程式碼塊中,以防遇到特殊情況。

NumberFormat 和 DecimalFormat 的作用在於,有一些方法控制格式化,還有一些方法控制解析。以下是對每種控制方法的詳細描述:

setParseIntegerOnly : 只影響解析,例如,如果為 true,則 "3456.78" -> 3456(並保留索引 6 後面的那個解析位置),如果為 false,則 "3456.78" -> 3456.78(並保留索引 8 後面的那個解析位置)。此方法與格式化無關。如果希望在小數點後面沒有數值的情況下不顯示小數點,則使用 setDecimalSeparatorAlwaysShown。

setDecimalSeparatorAlwaysShown :只影響格式化,且只影響小數點後沒有數值的情況,例如網要 "#,##0.##",如果為 true,則 3456.00 -> "3,456.",如果為 false,則 3456.00 -> "3456"。此方法與解析無關。如果希望解析在小數點處停止,則使用 setParseIntegerOnly。

還可以使用帶有 ParsePositionFieldPositionparseformat 方法的形式,它們允許:

例如,可以通過兩種方式對齊數值:
  1. 如果使用以間隔來對齊的等寬字體,可以在格式調用中傳遞 FieldPosition,令 field = INTEGER_FIELD。在輸出時,getEndIndex 將被設置為最後一個整數字元和小數字元之間的偏移量。在字元串前面加入 (desiredSpaceCount - getEndIndex) 個空格。
  2. 如果使用成比例的字體,則不是通過填充空格的方法,而是以像素為單位度量從開始處到 getEndIndex 的字元串寬度。然後在繪製文本之前將畫筆移動 (desiredPixelWidth - widthToAlignmentPoint) 個像素。對於沒有小數但可能在末尾有其他字元的字元串,這種方法也是有效的,例如,帶有圓括號的負數:"(12)" 用於 -12。

同步

數值格式化通常是不同步的。建議為每個執行緒創建獨立的格式實例。如果多個執行緒同時存取一個格式,則它必須是外部同步的。

另請參見:
DecimalFormat, ChoiceFormat, 序列化表格

巢狀類別摘要
static class NumberFormat.Field
          定義將用作從 NumberFormat.formatToCharacterIterator 返回的 AttributedCharacterIterator 中屬性鍵以及 FieldPosition 中欄位標識符的常數。
 
欄位摘要
static int FRACTION_FIELD
          用於建構 FieldPosition 物件的欄位常數。
static int INTEGER_FIELD
          用於建構 FieldPosition 物件的欄位常數。
 
建構子摘要
protected NumberFormat()
          唯一的建構子。
 
方法摘要
 Object clone()
          覆寫 Cloneable
 boolean equals(Object obj)
          覆寫 equals
 String format(double number)
          格式規範。
abstract  StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos)
          格式規範。
 String format(long number)
          格式規範。
abstract  StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos)
          格式規範。
 StringBuffer format(Object number, StringBuffer toAppendTo, FieldPosition pos)
          格式化一個數並將所得文本添加到給定字元串緩衝區。
static Locale[] getAvailableLocales()
          返回一個陣列,它包含所有此類別的 get*Instance 方法可以為其返回本地化實例的語言環境。
 Currency getCurrency()
          獲取格式化貨幣值時此數值格式使用的貨幣。
static NumberFormat getCurrencyInstance()
          返回當前預設語言環境的貨幣格式。
static NumberFormat getCurrencyInstance(Locale inLocale)
          返回指定語言環境的貨幣格式。
static NumberFormat getInstance()
          返回當前預設語言環境的通用數值格式。
static NumberFormat getInstance(Locale inLocale)
          返回指定語言環境的通用數值格式。
static NumberFormat getIntegerInstance()
          返回當前預設語言環境的整數格式。
static NumberFormat getIntegerInstance(Locale inLocale)
          返回指定語言環境的整數格式。
 int getMaximumFractionDigits()
          返回數的小數部分所允許的最大位數。
 int getMaximumIntegerDigits()
          返回數的整數部分所允許的最大位數。
 int getMinimumFractionDigits()
          返回數的小數部分所允許的最小位數。
 int getMinimumIntegerDigits()
          返回數的整數部分所允許的最小位數。
static NumberFormat getNumberInstance()
          返回當前預設語言環境的通用數值格式。
static NumberFormat getNumberInstance(Locale inLocale)
          返回指定語言環境的通用數值格式。
static NumberFormat getPercentInstance()
          返回當前預設語言環境的百分比格式。
static NumberFormat getPercentInstance(Locale inLocale)
          返回指定語言環境的百分比格式。
 RoundingMode getRoundingMode()
          獲取在此 NumberFormat 中使用的 RoundingMode
 int hashCode()
          覆寫 hashCode
 boolean isGroupingUsed()
          如果此格式中使用了分組,則返回 true。
 boolean isParseIntegerOnly()
          如果此格式只將數作為整數解析,則返回 true。
 Number parse(String source)
          解析給定字元串開頭的文本,產生一個數值。
abstract  Number parse(String source, ParsePosition parsePosition)
          如果可能則返回 Long (例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 範圍內且沒有小數),否則返回 Double。
 Object parseObject(String source, ParsePosition pos)
          解析字元串中的文本,以產生一個 Number
 void setCurrency(Currency currency)
          設置格式化貨幣值時此數值格式使用的貨幣。
 void setGroupingUsed(boolean newValue)
          設置此格式中是否使用分組。
 void setMaximumFractionDigits(int newValue)
          設置數的小數部分所允許的最大位數。
 void setMaximumIntegerDigits(int newValue)
          設置數的整數部分所允許的最大位數。
 void setMinimumFractionDigits(int newValue)
          設置數的小數部分所允許的最小位數。
 void setMinimumIntegerDigits(int newValue)
          設置數的整數部分所允許的最小位數。
 void setParseIntegerOnly(boolean value)
          設置數是否應該僅作為整數進行解析。
 void setRoundingMode(RoundingMode roundingMode)
          設置在此 NumberFormat 中使用的 RoundingMode
 
從類別 java.text.Format 繼承的方法
format, formatToCharacterIterator, parseObject
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

INTEGER_FIELD

public static final int INTEGER_FIELD
用於建構 FieldPosition 物件的欄位常數。表示必須返回格式化數值整數部分的位置。

另請參見:
FieldPosition, 常數欄位值

FRACTION_FIELD

public static final int FRACTION_FIELD
用於建構 FieldPosition 物件的欄位常數。表示必須返回格式化數值小數部分的位置。

另請參見:
FieldPosition, 常數欄位值
建構子詳細資訊

NumberFormat

protected NumberFormat()
唯一的建構子。(由子類別建構子調用,通常是隱式的)。

方法詳細資訊

format

public StringBuffer format(Object number,
                           StringBuffer toAppendTo,
                           FieldPosition pos)
格式化一個數並將所得文本添加到給定字元串緩衝區。該數可以是 Number 的任何子類別。

對於能夠被轉換為 long 型別而不丟失資訊的所有整型值,此實作使用 Number.longValue() 提取其數值,包括位長小於 64 的 BigInteger 值;使用 Number.doubleValue() 提取所有其他型別的值。然後它調用 format(long,java.lang.StringBuffer,java.text.FieldPosition)format(double,java.lang.StringBuffer,java.text.FieldPosition)。這可能導致丟失數值資訊以及 BigIntegerBigDecimal 值的精度。

指定者:
類別 Format 中的 format
參數:
number - 要格式化的數
toAppendTo - 要添加格式化文本的 StringBuffer
pos - 輸入時:如果需要,是一個對齊欄位。輸出時:是對齊欄位的偏移量。
返回:
作為 toAppendTo 傳入的值
拋出:
IllegalArgumentException - 如果 number 為 null 或不是 Number 的實例。
NullPointerException - 如果 toAppendTopos 為 null
ArithmeticException - 如果需要進行捨入但捨入網要設置為 RoundingMode.UNNECESSARY
另請參見:
FieldPosition

parseObject

public final Object parseObject(String source,
                                ParsePosition pos)
解析字元串中的文本,以產生一個 Number

此方法試圖解析從 pos 給定的索引處開始的文本。如果解析成功,則將 pos 的索引更新為所解析的最後一字元後的索引(不一定對直到字元串結尾的所有字元進行解析),並返回解析後的數。更新後的 pos 可以用來指示下次調用此方法的起始點。如果發生錯誤,則 pos 的索引不變,pos 的錯誤索引被設置為發生錯誤的字元的索引,並返回 null。

有關數值解析的更多資訊,請參閱 parse(String, ParsePosition) 方法。

指定者:
類別 Format 中的 parseObject
參數:
source - 一部分將要被解析的 String
pos - 具有以上所述的索引和錯誤索引資訊的 ParsePosition 物件。
返回:
從字元串進行解析的 Number。如果發生錯誤,則返回 null。
拋出:
NullPointerException - 如果 pos 為 null。

format

public final String format(double number)
格式規範。

拋出:
ArithmeticException - 如果需要進行捨入但捨入網要設置為 RoundingMode.UNNECESSARY
另請參見:
Format.format(java.lang.Object)

format

public final String format(long number)
格式規範。

拋出:
ArithmeticException - 如果需要進行捨入但捨入網要設置為 RoundingMode.UNNECESSARY
另請參見:
Format.format(java.lang.Object)

format

public abstract StringBuffer format(double number,
                                    StringBuffer toAppendTo,
                                    FieldPosition pos)
格式規範。

拋出:
ArithmeticException - 如果需要進行捨入但捨入網要設置為 RoundingMode.UNNECESSARY
另請參見:
Format.format(java.lang.Object)

format

public abstract StringBuffer format(long number,
                                    StringBuffer toAppendTo,
                                    FieldPosition pos)
格式規範。

拋出:
ArithmeticException - 如果需要進行捨入但捨入網要設置為 RoundingMode.UNNECESSARY
另請參見:
Format.format(java.lang.Object)

parse

public abstract Number parse(String source,
                             ParsePosition parsePosition)
如果可能則返回 Long (例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 範圍內且沒有小數),否則返回 Double。如果設置了 IntegerOnly,則將在小數點處停止解析(或者;例如,對於有理數 "1 2/3",將在 1 後面停止)。不拋出異常;如果沒有可被解析的物件,則索引不變!

另請參見:
isParseIntegerOnly(), Format.parseObject(java.lang.String, java.text.ParsePosition)

parse

public Number parse(String source)
             throws ParseException
解析給定字元串開頭的文本,產生一個數值。此方法不可以使用給定字元串的全部文本。

有關數值解析的更多資訊,請參閱 parse(String, ParsePosition) 方法。

參數:
source - 開頭應被解析的 String
返回:
從字元串解析的 Number
拋出:
ParseException - 如果無法解析指定字元串的開頭。

isParseIntegerOnly

public boolean isParseIntegerOnly()
如果此格式只將數作為整數解析,則返回 true。例如,在 English 語言環境中,如果 ParseIntegerOnly 為 true,則字元串 "1234." 將作為整數值 1234 進行解析,且解析將在 "." 字元處停止。當然,解析操作所接受的確切格式與語言環境相關,並且是由 NumberFormat 的子類別確定的。


setParseIntegerOnly

public void setParseIntegerOnly(boolean value)
設置數是否應該僅作為整數進行解析。

另請參見:
isParseIntegerOnly()

getInstance

public static final NumberFormat getInstance()
返回當前預設語言環境的通用數值格式。這與調用 getNumberInstance() 相同。


getInstance

public static NumberFormat getInstance(Locale inLocale)
返回指定語言環境的通用數值格式。這與調用 getNumberInstance(inLocale) 相同。


getNumberInstance

public static final NumberFormat getNumberInstance()
返回當前預設語言環境的通用數值格式。


getNumberInstance

public static NumberFormat getNumberInstance(Locale inLocale)
返回指定語言環境的通用數值格式。


getIntegerInstance

public static final NumberFormat getIntegerInstance()
返回當前預設語言環境的整數格式。返回數的格式使用四捨五入演算法將浮點數捨入為最接近的整數(參見 RoundingMode.HALF_EVEN),並只解析輸入字元串的整數部分(參見 isParseIntegerOnly)。

返回:
整數值的數值格式
從以下版本開始:
1.4
另請參見:
getRoundingMode()

getIntegerInstance

public static NumberFormat getIntegerInstance(Locale inLocale)
返回指定語言環境的整數格式。返回數的格式使用四捨五入演算法將浮點數捨入為最接近的整數(參見 RoundingMode.HALF_EVEN),並只解析輸入字元串的整數部分(參見 isParseIntegerOnly)。

返回:
整數值的數值格式
從以下版本開始:
1.4
另請參見:
getRoundingMode()

getCurrencyInstance

public static final NumberFormat getCurrencyInstance()
返回當前預設語言環境的貨幣格式。


getCurrencyInstance

public static NumberFormat getCurrencyInstance(Locale inLocale)
返回指定語言環境的貨幣格式。


getPercentInstance

public static final NumberFormat getPercentInstance()
返回當前預設語言環境的百分比格式。


getPercentInstance

public static NumberFormat getPercentInstance(Locale inLocale)
返回指定語言環境的百分比格式。


getAvailableLocales

public static Locale[] getAvailableLocales()
返回一個陣列,它包含所有此類別的 get*Instance 方法可以為其返回本地化實例的語言環境。返回陣列表示 Java 運行時和安裝的 NumberFormatProvider 實作所支持的語言環境的並集。它必須至少包含一個等同於 Locale.USLocale 實例。

返回:
一個陣列,它包含可獲得其本地化 NumberFormat 實例的語言環境。

hashCode

public int hashCode()
覆寫 hashCode

覆寫:
類別 Object 中的 hashCode
返回:
此物件的一個雜湊碼值。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
覆寫 equals

覆寫:
類別 Object 中的 equals
參數:
obj - 要與之比較的參考物件。
返回:
如果此物件與 obj 參數相同,則返回 true;否則返回 false
另請參見:
Object.hashCode(), Hashtable

clone

public Object clone()
覆寫 Cloneable

覆寫:
類別 Format 中的 clone
返回:
此實例的一個副本。
另請參見:
Cloneable

isGroupingUsed

public boolean isGroupingUsed()
如果此格式中使用了分組,則返回 true。例如,在 English 語言環境中,如果使用了分組,則數 1234567 將被格式化為 "1,234,567"。組分隔符以及每個組的大小是與語言環境相關的,由 NumberFormat 的子類別確定。

另請參見:
setGroupingUsed(boolean)

setGroupingUsed

public void setGroupingUsed(boolean newValue)
設置此格式中是否使用分組。

另請參見:
isGroupingUsed()

getMaximumIntegerDigits

public int getMaximumIntegerDigits()
返回數的整數部分所允許的最大位數。

另請參見:
setMaximumIntegerDigits(int)

setMaximumIntegerDigits

public void setMaximumIntegerDigits(int newValue)
設置數的整數部分所允許的最大位數。maximumIntegerDigits 必須 >= minimumIntegerDigits。如果 maximumIntegerDigits 的新值小於 minimumIntegerDigits 的當前值,則 minimumIntegerDigits 也將被設置為新值。

參數:
newValue - 要顯示的最大整數位數;如果小於 0,則使用 0。具體子類別可以為此值強加一個上限,以適合於被格式化的數值型別。
另請參見:
getMaximumIntegerDigits()

getMinimumIntegerDigits

public int getMinimumIntegerDigits()
返回數的整數部分所允許的最小位數。

另請參見:
setMinimumIntegerDigits(int)

setMinimumIntegerDigits

public void setMinimumIntegerDigits(int newValue)
設置數的整數部分所允許的最小位數。minimumIntegerDigits 必須 <= maximumIntegerDigits。如果 minimumIntegerDigits 的新值超過了 maximumIntegerDigits 的當前值,那麼 maximumIntegerDigits 也將被設置為新值

參數:
newValue - 要顯示的整數的最小位數;如果小於 0,則使用 0。具體子類別可以為此值強加一個上限,以適合於被格式化的數值型別。
另請參見:
getMinimumIntegerDigits()

getMaximumFractionDigits

public int getMaximumFractionDigits()
返回數的小數部分所允許的最大位數。

另請參見:
setMaximumFractionDigits(int)

setMaximumFractionDigits

public void setMaximumFractionDigits(int newValue)
設置數的小數部分所允許的最大位數。maximumFractionDigits 必須 >= minimumFractionDigits。如果 maximumFractionDigits 的新值小於 minimumFractionDigits 的當前值,則 minimumFractionDigits 也將被設置為新值。

參數:
newValue - 要顯示的小數的最大位數;如果小於 0,則使用 0。具體子類別可以為此值強加一個上限,以適合於被格式化的數值型別。
另請參見:
getMaximumFractionDigits()

getMinimumFractionDigits

public int getMinimumFractionDigits()
返回數的小數部分所允許的最小位數。

另請參見:
setMinimumFractionDigits(int)

setMinimumFractionDigits

public void setMinimumFractionDigits(int newValue)
設置數的小數部分所允許的最小位數。minimumFractionDigits 必須 <= maximumFractionDigits。如果 minimumFractionDigits 的新值超過了 maximumFractionDigits 的當前值,那麼 maximumIntegerDigits 也將被設置為新值

參數:
newValue - 要顯示的小數的最小位數;如果小於 0,則使用 0。具體子類別可以為此值強加一個上限,以適合於被格式化的數值型別。
另請參見:
getMinimumFractionDigits()

getCurrency

public Currency getCurrency()
獲取格式化貨幣值時此數值格式使用的貨幣。以與語言環境相關的方式導出初始值。如果不能確定有效的貨幣,或者沒有使用 setCurrency 設置任何貨幣,則返回值為 null。

預設實作拋出 UnsupportedOperationException

返回:
此數值格式使用的貨幣,或者 null
拋出:
UnsupportedOperationException - 如果數值格式類別不實作貨幣格式化
從以下版本開始:
1.4

setCurrency

public void setCurrency(Currency currency)
設置格式化貨幣值時此數值格式使用的貨幣。此方法不更新數值格式所使用的小數的最小位數或最大位數。

預設實作拋出 UnsupportedOperationException

參數:
currency - 此數值格式要使用的新貨幣
拋出:
UnsupportedOperationException - 如果數值格式類別不實作貨幣格式化
NullPointerException - 如果 currency 為 null
從以下版本開始:
1.4

getRoundingMode

public RoundingMode getRoundingMode()
獲取在此 NumberFormat 中使用的 RoundingMode。在 NumberFormat 中此方法的預設實作始終拋出 UnsupportedOperationException。處理不同捨入網要的子類別應該覆寫此方法。

返回:
用於此 NumberFormat 的 RoundingMode
拋出:
UnsupportedOperationException - 預設實作始終拋出此異常
從以下版本開始:
1.6
另請參見:
setRoundingMode(RoundingMode)

setRoundingMode

public void setRoundingMode(RoundingMode roundingMode)
設置在此 NumberFormat 中使用的 RoundingMode。在 NumberFormat 中此方法的預設實作始終拋出 UnsupportedOperationException。處理不同捨入網要的子類別應該覆寫此方法。

參數:
roundingMode - 要使用的 RoundingMode
拋出:
UnsupportedOperationException - 預設實作始終拋出此異常
NullPointerException - 如果 roundingMode 為 null
從以下版本開始:
1.6
另請參見:
getRoundingMode()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only