Formato de números

Flash Player 10.1 y posterior, Adobe AIR 2.0 y posterior

El formato de visualización de valores numéricos varía sustancialmente entre las regiones. Por ejemplo, el número 123456.78 se escribiría del modo siguiente en determinadas configuraciones regionales:

Configuración local

Formato de número

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

-123,456.78

de-DE (alemán, Alemania)

-123.456,78

fr-FR (francés, Francia)

-123 456,78

de-CH (alemán, Suiza)

-123'456.78

en-IN (inglés, India)

-1,23,456.78

Varias configuraciones regionales árabes

123,456.78-

Existen muchos factores que influyen en los formatos de números, por ejemplo:

  • Separadores. El separador decimal se coloca entre el entero y la fracción de un número. Puede ser un punto, una coma u otro carácter. El separador de agrupación o separador de miles puede ser un punto, una coma, un espacio duro u otro carácter.

  • Patrones de agrupación. El número de dígitos entre cada separador de agrupación a la izquierda de la coma decimal puede ser dos, tres u otro valor.

  • Indicadores de números negativos. Los números negativos se pueden escribir con un signo menos a la izquierda o a la derecha del número, o entre paréntesis en aplicaciones financieras. Por ejemplo, un 19 negativo se puede escribir como -19, 19- o (19).

  • Ceros a la derecha y a la izquierda. Algunas convenciones culturales añaden ceros a la derecha o a la izquierda para escribir números. Por ejemplo, el valor 0.17 puede escribirse como .17, 0.17 o 0.170, entre otras posibilidades.

  • Conjuntos de caracteres de dígitos. Muchos idiomas, como el hindi, el árabe y el japonés, utilizan distintos conjuntos de caracteres de dígitos. El paquete flash.globalization admite todos los conjuntos de caracteres de dígitos que representan los dígitos 0-9.

La clase NumberFormatter considera todos los factores al dar formato a valores numéricos.

Uso de la clase NumberFormatter

La clase NumberFormatter aplica formato a valores numéricos (de tipo int, uint o Number) según las convenciones de una configuración regional específica.

El siguiente ejemplo muestra el modo más sencillo de dar formato a un número con las propiedades predeterminadas de formato proporcionadas por el sistema operativo del usuario:

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

El resultado variará en función de la configuración regional del usuario y de sus preferencias. Por ejemplo, si la configuración regional del usuario es fr-FR, el valor con formato sería:

-123.456,789

Si solo quiere dar formato a un número para una configuración regional específica, independientemente de la configuración del usuario, defina el nombre de la configuración regional exacta que desee. Por ejemplo:

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

Los resultados en este caso son:

-123'456.789

El método formatNumber() toma un objeto Number como parámetro. La clase NumberFormatter también tiene un método formatInt() que toma un objeto int como entrada, y un método formatUint() que toma un objeto uint.

Puede controlar de forma explícita la lógica de formato estableciendo propiedades de la clase NumberFormatter, tal como puede verse en este ejemplo:

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) 

Este ejemplo primero crea un objeto NumberFormatter y después:

  • establece el formato de número negativo con paréntesis (como en aplicaciones financieras);

  • establece el número de dígitos detrás del separador decimal en 5;

  • especifica los ceros a la derecha que deben usarse para garantizar cinco posiciones decimales;

  • define el separador decimal en una coma;

  • pide al aplicador de formato no utilizar separadores de agrupación.

Nota: al cambiar algunas de estas propiedades, el formato de número resultante ya no corresponderá al formato preferido en la configuración regional especificada. Utilice algunas de estas propiedades solo si no es importante la configuración regional; si necesita control preciso sobre algún aspecto de formato, como el número de ceros a la derecha; o si el usuario solicita el cambio directamente, por ejemplo, desde el Panel de control de Windows.

Análisis de cadenas con valores numéricos

La clase NumberFormatter también puede extraer valores numéricos de cadenas que se ajusten a los requisitos de formato específicos de la configuración regional. El método NumberFormatter.parseNumber() extra un solo valor numérico de una cadena. Por ejemplo:

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

El método parseNumber() controla cadenas que solo contienen dígitos y caracteres de formato de números, como signos negativos y separadores. Si la cadena contiene otros caracteres, se define un código de error:

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

Para extraer números de cadenas con caracteres alfabéticos adicionales, utilice el método 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

El método parse() devuelve un objeto NumberParseResult que contiene el valor numérico analizado en su propiedad value. La propiedad startIndex indica el índice del primer carácter numérico encontrado. Puede utilizar las propiedades startIndex y endIndex para extraer las partes de la cadena que van antes y después de los dígitos.