Формат валюты

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 $                

В этом примере строка ввода содержит строку валюты, за которой следуют знак минуса и число. Однако значение negativeCurrencyFormat по умолчанию для локали en-US определяет, что сначала стоит указатель отрицательного числа. Поэтому метод parse() создает ошибку, и проанализированным значением является NaN.

После задания для свойства negativeCurrencyFormat значения 2, которое задает использование строки валюты в начале, метод parse() выполняется успешно.