格式化貨幣值

Flash Player 10.1 以及更新的版本,Adobe AIR 2.0 以及更新的版本

貨幣值的顯示格式不同,就和數字格式一樣。例如,以下是特定地區設定格式化美元值 $123456.78 的方式:

地區

數字格式

en-US (英文,美國)

$123,456.78

de-DE (德文,德國)

123.456,78 $

en-IN (英文,印度)

$ 1,23,456.78

貨幣格式包含數字格式的所有因素,而且再加上這些其他因素:

  • 貨幣 ISO 代碼。實際使用的地區設定 ISO 4217 貨幣代碼,是由三個字母組成 (例如 USD 或 EUR)。

  • 貨幣符號。實際使用的地區設定貨幣符號或字串 (例如 $ 或 €)。

  • 負值貨幣格式。定義貨幣金額中,貨幣符號與負號或小括弧相對於數字部分的位置。

  • 正值貨幣格式。定義貨幣金額中,貨幣符號相對於數字部分的位置。

使用 CurrencyFormatter 類別

CurrencyFormatter 類別會根據特定地區設定的慣例,將數值格式化為含有貨幣字串和格式化數字的字串。

當您初始化新的 CurrencyFormatter 物件時,該物件會將其貨幣設為給定地區設定的預設貨幣。

下列範例顯示使用德文地區設定所建立的 CurrencyFormatter 物件,假設貨幣金額是歐元:

var cf:CurrencyFormatter = new CurrencyFormatter( "de-DE" ); 
trace(cf.format(1234567.89)); // 1.234.567,89 EUR

在大部分情況下,請不要依賴地區設定的預設貨幣。如果不支援使用者的預設地區設定,則 CurrencyFormatter 類別會指定後援地區設定。後援地區設定可能會使用不同的預設貨幣。此外,您一般也會想要使用者看到正確的貨幣格式,即使金額的單位並非使用者的當地貨幣。例如,加拿大使用者想要看到德國公司的歐元價格,但是要以加拿大樣式進行格式化。

CurrencyFormatter.setCurrency() 方法指定確切的貨幣字串以及使用的貨幣符號。

下列範例是對加拿大的法區使用者顯示歐元的貨幣金額:

var cf:CurrencyFormatter = new CurrencyFormatter( "fr-CA" ); 
cf.setCurrency("EUR", "€"); 
trace(cf.format(1234567.89)); // 1.234.567,89 EUR

setCurrency() 方法也可以用來設定明確的貨幣符號,以減少混淆。例如:

cf.setCurrency("USD","US$");

format() 方法預設會顯示三個字元的 ISO 4217 貨幣代碼,而非貨幣符號。ISO 4217 貨幣代碼十分明確,因此並不需要當地語系化。不過,許多使用者都偏好看到貨幣符號,而非 ISO 代碼。

CurrencyFormatter 類別可協助您決定格式化的貨幣字串所使用的貨幣符號 (如美元符號或歐元符號),或使用三個字元的 ISO 貨幣字串 (例如 USD 或 EUR)。例如,針對加拿大使用者,加拿大幣金額會顯示為 $200。不過,針對美國使用者,則會顯示為 CAD 200。使用 formattingWithCurrencySymbolIsSafe() 方法,決定指定使用者地區設定的情況下,金額的貨幣符號為模稜兩或不正確。

下列範例會將歐元的值格式化為 en-US 地區設定的格式。根據使用者的地區設定,輸出字串會使用 ISO 貨幣代碼或貨幣符號。

var cf:CurrencyFormatter = new CurrencyFormatter( "en-CA"); 
 
if (cf.formattingWithCurrencySymbolIsSafe("USD")) 
{ 
    trace(cf.format(1234567.89, true)); // $1,234,567.89 
} 
else 
{ 
    cf.setCurrency("USD", "$"); 
    trace(cf.format(1234567.89)); // USD1,234,567.89 
}

剖析含有貨幣值的字串

CurrencyFormatter 類別也可以從符合地區設定特有格式需求的輸入字串中取出貨幣金額和貨幣字串。CurrencyFormatter.parse() 方法會將剖析過的金額和貨幣字串,儲存於 CurrencyParseResult 物件 (如下所示):

var cf:CurrencyFormatter = new CurrencyFormatter( "en-US" ); 
var inputCurrencyString:String = "(GBP 123,56,7.890)"; 
var parseResult:CurrencyParseResult = cf.parse(inputCurrencyString); 
trace("parsed amount: " + parseResult.value); // -1234567.89 
trace("currencyString: " + parseResult.currencyString ); // GBP

輸入字串的貨幣字串位置可以包含貨幣符號、貨幣 ISO 代碼和其他文字字元。貨幣字串、負數指示器和數值的位置會符合 negativeCurrencyFormat 和 positiveCurrencyFormat 屬性所指定的格式。例如:

var cf:CurrencyFormatter = new CurrencyFormatter( "en-US" ); 
var inputCurrencyString:String = "Total $-123,56,7.890"; 
var parseResult:CurrencyParseResult = cf.parse(inputCurrencyString); 
trace("status: " + cf.lastOperationStatus ); // parseError 
trace("parsed amount: " + parseResult.value); // NaN 
trace("currencyString: " + parseResult.currencyString ); // 
cf.negativeCurrencyFormat = 2; 
parseResult = cf.parse(inputCurrencyString); 
trace("status: " + cf.lastOperationStatus ); // noError 
trace("parsed amount: " + parseResult.value); // -123567.89 
trace("currencyString: " + parseResult.currencyString ); // Total $                

在這個範例中,輸入字串的貨幣字串後面會接著減號和數字。不過,en-US 地區設定的預設 negativeCurrencyFormat 值指定先顯示負值指示器。因此,parse() 方法會產生錯誤,而剖析過的值是 NaN。

在它將 negativeCurrencyFormat 設為 2 (其指定先顯示貨幣字串) 之後,parse() 方法就會成功。