Formatage des valeurs en devise

Flash Player 10.1 et les versions ultérieures, Adobe AIR 2.0 et les versions ultérieures

Les formats d’affichage des valeurs en devise varient tout autant que les formats numériques. La valeur 123456,78 $ est par exemple formatée comme suit selon les paramètres régionaux en vigueur :

Paramètres régionaux

Formatage du nombre

en-US (anglais, Etats-Unis)

$123,456.78

de-DE (allemand, Allemagne)

123.456,78 $

en-IN (anglais, Inde)

$ 1,23,456.78

Le formatage des valeurs en devise est affecté par les mêmes facteurs que le formatage numérique, auxquels s’ajoutent les facteurs complémentaires suivants :

  • Code ISO de devise : code de devise ISO 4217 de trois lettres des paramètres régionaux actuellement spécifiés (USD ou EUR, par exemple).

  • Symbole de devise : chaîne ou symbole de devise correspondant aux paramètres régionaux actuellement spécifiés ($ ou €, par exemple).

  • Format de devise négatif : définit l’emplacement du symbole de devise et du symbole négatif ou des parenthèses par rapport à la partie numérique du montant en devise.

  • Format de devise positif : définit l’emplacement du symbole de devise par rapport à la partie numérique du montant en devise.

Utilisation de la classe CurrencyFormatter

La classe CurrencyFormatter transforme les valeurs numériques en chaînes contenant des chaînes de devise et des nombres formatés, conformément aux conventions de paramètres régionaux donnés.

Lorsque vous instanciez un nouvel objet CurrencyFormatter, il définit la devise sur la devise associée par défaut aux paramètres régionaux en vigueur.

L’exemple suivant indique qu’un objet CurrencyFormatter créé à partir de paramètres régionaux allemands part du principe que les montants en devise sont exprimés en euros :

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

Dans la plupart des cas, ne vous fiez pas à la devise associée par défaut aux paramètres régionaux. Si les paramètres régionaux par défaut d’un utilisateur ne sont pas pris en charge, la classe CurrencyFormatter affecte des paramètres régionaux de substitution. Les paramètres régionaux de substitution utilisent parfois une autre devise par défaut. Par ailleurs, les formats en devise doivent généralement sembler corrects à l’utilisateur, même si les montants ne sont pas exprimés dans sa devise locale. Ainsi, un utilisateur canadien peut être amené à afficher les tarifs d’une entreprise allemande en euros, mais formatés dans le style canadien.

La méthode CurrencyFormatter.setCurrency() spécifie la chaîne et le symbole de devise exacts à utiliser.

L’exemple suivant affiche les montants en devise en euros à l’intention des utilisateurs québécois :

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

La méthode setCurrency() permet également de réduire les risques de confusion en définissant des symboles de devise non ambigus. Exemple :

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

Par défaut, la méthode format() affiche un code de devise ISO 4217 de trois caractères au lieu du symbole de devise. Les codes ISO 4217 ne sont pas ambigus et ne nécessitent pas de localisation. Un grand nombre d’utilisateurs préfèrent toutefois les symboles de devise aux codes ISO.

La classe CurrencyFormatter peut vous aider à décider du symbole utilisé par une chaîne en devise formatée : un symbole de devise ($ ou €, par exemple) ou une chaîne de devise ISO de trois caractères (USD ou EUR, par exemple). Ainsi, un montant exprimé en dollars canadiens pourrait être affiché sous la forme $200 à l’intention d’un utilisateur qui réside au Canada. Pour un utilisateur qui réside aux Etats-Unis, il pourrait par contre être affiché sous la forme CAD 200. La méthode formattingWithCurrencySymbolIsSafe() permet de déterminer si le symbole de devise d’un montant risque d’être ambigu ou incorrect en fonction des paramètres régionaux de l’utilisateur.

L’exemple suivant affiche une valeur en euros dans un format adapté aux paramètres régionaux en-US. Selon les paramètres régionaux de l’utilisateur, la chaîne sortie contient soit le code de devise ISO, soit le symbole de devise.

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 
}

Analyse des chaînes contenant des valeurs en devise

La classe CurrencyFormatter peut également extraire un montant et une chaîne de devise d’une chaîne de sortie conforme aux conventions de formatage des paramètres régionaux. La méthode CurrencyFormatter.parse() enregistre le montant et la chaîne de devise analysés dans un objet CurrencyParseResult, comme illustré ci-après :

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 partie chaîne de devise de la chaîne d’entrée peut contenir un symbole de devise, un code ISO de devise et des caractères texte. La position de la chaîne de devise, de l’indicateur de nombre négatif et de la valeur numérique correspond aux formats spécifiés par les propriétés negativeCurrencyFormat et positiveCurrencyFormat. Exemple :

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 $                

Dans cet exemple, la chaîne d’entrée contient une chaîne de devise, suivie d’un signe moins et d’un nombre. Toutefois, la valeur negativeCurrencyFormat par défaut associée aux paramètres régionaux en-US spécifie que l’indicateur négatif est placé en première position. Par conséquent, la méthode parse() génère une erreur et la valeur analysée est NaN.

Une fois negativeCurrencyFormat défini sur 2, qui stipule que la chaîne de devise est placée en première position, la méthode parse() aboutit.