Formato de valores de divisa

Flash Player 10.1 y posterior, Adobe AIR 2.0 y posterior

Los formatos de visualización de valores de divisa varían tanto como los de los números. Por ejemplo, un valor en dólares estadounidenses de $123456.78 tiene distinto formato en determinadas regiones:

Configuración local

Formato de número

en-US (inglés, EE.UU.)

$123,456.78

de-DE (alemán, Alemania)

123.456,78 $

en-IN (inglés, India)

$ 1,23,456.78

El formato de divisa implica los mismos factores que el de números, además de algunos adicionales:

  • Código ISO de divisa. El código de divisa ISO 4217 de tres letras para la configuración regional real que se utiliza, por ejemplo, USD o EUR.

  • Símbolo de divisa. El símbolo o cadena de divisa para la configuración regional real que se utiliza, por ejemplo, $ o €.

  • Formato de divisa negativa. Define la ubicación del símbolo de divisa y del símbolo negativo o el paréntesis en relación con la parte numérica de la cantidad de divisa con formato.

  • Formato de divisa positiva. Define la ubicación del símbolo de divisa relativo a la parte numérica de la cantidad de divisa.

Uso de la clase CurrencyFormatter

La clase CurrencyFormatter aplica a valores numéricos formato de cadenas que contienen cadenas de divisa y números con formato, según las convenciones de una configuración regional específica.

Cuando se crea una nueva instancia del objeto CurrencyFormatter, establece su divisa en la divisa predeterminada de la configuración regional seleccionada.

El siguiente ejemplo muestra cómo un objeto CurrencyFormatter creado con una configuración regional de alemán asume que las cantidades de divisa están en euros:

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

En la mayoría de los casos no se debe depender de la divisa predeterminada en una configuración regional. Si la configuración regional del usuario no se admite, la clase CurrencyFormatter asigna una configuración regional de repuesto. La configuración regional de repuesto puede tener una divisa predeterminada distinta. Además, normalmente querrá que los formatos de divisa tengan un aspecto correcto para el usuario, incluso si las cantidades no están en la divisa local del usuario. Por ejemplo, un usuario canadiense quiere ver los precios de una empresa alemana en euros, pero con formato canadiense.

El método CurrencyFormatter.setCurrency() especifica la cadena de divisa exacta y el símbolo que debe utilizarse.

El siguiente ejemplo muestra cantidades de divisa en euros a usuarios en la parte francófona de Canadá:

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

El método setCurrency() también se puede utilizar para reducir la confusión y establecer símbolos de divisa sin ambigüedades. Por ejemplo:

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

De forma predeterminada, el método format() muestra un código de divisa ISO 4217 de tres caracteres en vez del símbolo de la divisa. Los códigos ISO 4217 son inequívocos y no requieren localización. Sin embargo, muchos usuarios prefieren utilizar los símbolos de divisa en vez de los códigos ISO.

La clase CurrencyFormatter puede ayudarle a decidir si una cadena de divisa con formato debe utilizar un símbolo de divisa, como el símbolo del dólar o del euro, o si debe utilizar una cadena de divisa ISO de tres caracteres, como USD o EUR. Por ejemplo, una cantidad en dólares canadienses puede visualizarse como $200 para un usuario en Canadá. Para un usuario en España, sin embargo, se visualizaría como CAD 200. Utilice el método formattingWithCurrencySymbolIsSafe() para determinar si el símbolo de divisa de la cantidad será ambiguo o incorrecto teniendo en cuenta la configuración regional del usuario.

El siguiente ejemplo aplica formato de configuración regional en-US a un valor en euros. En función de la configuración regional del usuario, la cadena de salida usará el código de divisa ISO o el símbolo de la divisa.

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 
}

Análisis de cadenas con valores de divisa

La clase CurrencyFormatter también puede extraer una cantidad de divisa y una cadena de divisa de una cadena de entrada que se ajuste a los requisitos de formato específicos de la configuración regional. EL método CurrencyFormatter.parse() guarda la cantidad analizada y la cadena de divisa en un objeto CurrencyParseResult, como puede verse aquí:

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

La parte de cadena de divisa de la cadena de entrada puede contener un símbolo de divisa, un código ISO de divisa y caracteres de texto adicionales. Las posiciones de la cadena de divisa, el indicador de número negativo y el valor numérico deben coincidir con los formatos especificados en las propiedades negativeCurrencyFormat y positiveCurrencyFormat. Por ejemplo:

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 este ejemplo, la cadena de entrada tiene una cadena de divisa seguida de un signo menos y de un número. Sin embargo, el valor predeterminado de negativeCurrencyFormat para la configuración regional en-US especifica que el indicador negativo debe ir primero. Como resultado, el método parse() genera un error y el valor analizado es NaN.

Tras definir negativeCurrencyFormat como 2, que especifica que la cadena de divisa va primero, el método parse() se ejecuta correctamente.