设置货币值格式

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() 方法就会成功执行。