Formatage des nombres

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

Le format d’affichage des valeurs numériques varie considérablement d’une région à l’autre. Le nombre 123456,78 est par exemple formaté 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

fr-FR (français, France)

-123 456,78

de-CH (allemand, Suisse)

-123’456.78

en-IN (anglais, Inde)

-1,23,456.78

La plupart des paramètres régionaux arabes

123,456.78-

Un grand nombre de facteurs affectent les formats numériques, tels que :

  • Séparateurs : le séparateur décimal est placé entre le nombre entier et la partie fractionnelle d’un nombre. Il peut correspondre à un point, une virgule ou un autre caractère. Le séparateur de milliers peut être un point, une virgule, un espace insécable ou un autre caractère.

  • Types de regroupement : le nombre de chiffres entre chaque séparateur de milliers à gauche du séparateur décimal peut correspondre à deux, trois, voire une autre valeur.

  • Indicateurs de nombre négatif : signe moins inséré sur la gauche ou la droite du nombre négatif, ou nombre négatif placé entre parenthèses pour les applications financières. Ainsi, le nombre 19 négatif peut être affiché comme suit : -19, 19- ou (19).

  • Zéros à droite ou à gauche : certaines conventions culturelles ajoutent des zéros à gauche ou à droite des nombres affichés. Ainsi, la valeur 0,17 peut être affichée comme suit : .17, 0,17 ou 0,170, etc.

  • Jeux de caractères numériques : de nombreuses langues, parmi lesquelles l’arabe, l’hindi et le japonais, utilisent différents jeux de caractères numériques. Le package flash.globalization prend en charge tous les jeux de caractères numériques mappés sur les chiffres 0 à 9.

La classe NumberFormatter prend en compte tous ces facteurs lors du formatage de valeurs numériques.

Utilisation de la classe NumberFormatter

La classe NumberFormatter formate les valeurs numériques (de type int, uint ou Number) en fonction des conventions de paramètres régionaux donnés.

L’exemple suivant illustre la façon la plus simple de formater un nombre en fonction des propriétés de formatage par défaut gérées par le système d’exploitation de l’utilisateur :

var nf:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT); 
trace(nf.formatNumber(-123456.789))

Le résultat varie selon les paramètres régionaux en vigueur et les préférences de l’utilisateur. Ainsi, si les paramètres régionaux de l’utilisateur correspondent à fr-FR, la valeur est formatée comme suit :

-123.456,789

Si vous souhaitez vous limiter au formatage d’un nombre en fonction de paramètres régionaux donnés, quels que soient les paramètres de l’utilisateur, définissez spécifiquement le nom des paramètres régionaux. Exemple :

var nf:NumberFormatter = new NumberFormatter("de-CH"); 
trace(nf.formatNumber(-123456.789));

Dans ce cas de figure, le résultat est le suivant :

-123’456.789

La méthode formatNumber() traite la valeur Number comme un paramètre. La classe NumberFormatter gère également une méthode formatInt(), qui gère l’entrée int, et une méthode formatUint(), qui gère l’entrée uint.

Pour contrôler explicitement la logique de formatage, définissez les propriétés de la classe NumberFormatter, comme illustré ci-dessous :

var nf:NumberFormatter = new NumberFormatter("de-CH"); 
nf.negativeNumberFormat = 0; 
nf.fractionalDigits = 5; 
nf.trailingZeros = true; 
nf.decimalSeparator = ","; 
nf.useGrouping = false; 
trace(nf.formatNumber(-123456.789)); //(123456.78900) 

Cet exemple commence par créer un objet NumberFormatter, puis :

  • définit le format numérique négatif de sorte à utiliser des parenthèses (comme dans les applications financières) ;

  • définit le nombre de chiffres après le séparateur décimal sur 5 ;

  • stipule l’insertion de zéros à droite pour garantir la présence de cinq décimales ;

  • définit le séparateur décimal sur une virgule ;

  • indique à la fonctionnalité de formatage de ne pas utiliser de séparateur de milliers.

Remarque : si certaines de ces propriétés sont modifiées, le format numérique résultant ne correspond plus au format préféré associé aux paramètres régionaux indiqués. Ne faites appel à certaines de ces propriétés que si la prise en charge des paramètres régionaux est superflue, comme dans les cas de figure suivants : si un aspect unique du format doit être contrôlé avec précision (le nombre de zéros à droite, par exemple) ou si l’utilisateur demande directement la modification (via le Panneau de configuration Windows, par exemple).

Analyse des chaînes contenant des valeurs numériques

La classe NumberFormatter peut également extraire des valeurs numériques de chaînes conformes aux conventions de formatage stipulées par les paramètres régionaux. La méthode NumberFormatter.parseNumber() extrait une valeur numérique unique d’une chaîne. Exemple :

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String =  "-1,234,567.890" 
var parsedNumber:Number = nf.parseNumber(inputNumberString); 
trace("Value:" + parsedNumber); // -1234567.89 
trace("Status:" + nf.lastOperationStatus); // noError

La méthode parseNumber() gère les chaînes qui ne contiennent que des caractères de formatage de chiffres et de nombres, tels que les signes moins et les séparateurs. Si la chaîne contient d’autres caractères, un code d’erreur est défini :

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String =  "The value is 1,234,567.890" 
var parsedNumber:Number = nf.parseNumber(inputNumberString); 
trace("Value:" + parsedNumber); // NaN 
trace("Status:" + nf.lastOperationStatus); // parseError

Pour extraire des nombres de chaînes qui contiennent également des caractères alphabétiques, faites appel à la méthode NumberFormatter.parse() :

var nf:NumberFormatter = new NumberFormatter( "en-US" ); 
var inputNumberString:String = "The value is 123,456,7.890"; 
var parseResult:NumberParseResult = nf.parse(inputNumberString); 
trace("Value:" + parseResult.value); // 1234567.89 
trace("startIndex: " + parseResult.startIndex); // 14 
trace("Status:" + nf.lastOperationStatus); // noError

La méthode parse() renvoie un objet NumberParseResult, dont la propriété Value contient la valeur numérique analysée. La propriété startIndex indique l’index du premier caractère numérique détecté. Les propriétés startIndex et endIndex permettent d’extraire les sections de chaîne qui précèdent ou suivent les chiffres.