Formattazione di numeri

Flash Player 10.1 e versioni successive, Adobe AIR 2.0 e versioni successive

Il formato di visualizzazione dei valori numerici varia ampiamente da una regione dall'altra. L'esempio seguente mostra come viene formattato il numero 123456.78 per alcune impostazioni internazionali:

Impostazioni internazionali

Formato numero

en-US (Inglese, Stati Uniti)

-123,456.78

de-DE (Tedesco, Germania)

-123.456,78

fr-FR (Francese, Francia)

-123 456,78

de-CH (Tedesco, Svizzera)

-123'456.78

en-IN (Inglese, India)

-1,23,456.78

Molte impostazioni internazionali arabe

123,456.78-

Esistono numerosi fattori che influenzano i formati numerici, compresi:

  • Separatori. Il separatore decimale è inserito tra l'intero e le parti frazionarie di un numero. Può essere un punto, una virgola o un altro carattere. Il separatore di gruppo o il separatore di migliaia può essere un punto, una virgola, uno spazio unificatore o un altro carattere.

  • Modelli di raggruppamento. Il numero di cifre tra ogni separatore di gruppo a sinistra del punto decimale può essere due, tre o un altro valore.

  • Indicatori di numero negativo. I numeri negativi possono essere mostrati con un segno meno a sinistra o a destra del numero, oppure all'interno di parentesi per applicazioni finanziarie. Ad esempio, 19 negativo può essere visualizzato come -19, 19- o (19).

  • Zeri iniziali e finali. Alcune convenzioni culturali aggiungono zeri iniziali o finali ai numeri visualizzati. Ad esempio, il valore 0,17 può essere visualizzato come .17, 0,17 o 0,170, tra le altre opzioni.

  • Set di caratteri cifra. Molte lingue, compreso l'hindi, l'arabo e il giapponese, utilizzano set di caratteri cifra diversi. Il pacchetto flash.globalization supporta qualsiasi set di caratteri cifra che corrisponde alle cifre 0-9.

La classe NumberFormatter considera tutti questi fattori durante la formattazione di lavori numerici.

Uso della classe NumberFormatter

La classe NumberFormatter consente di formattare valori numerici (di tipo int, uint o Number) in base alle convenzioni di impostazioni internazionali specifiche.

Nell'esempio seguente viene mostrato il modo più semplice per formattare un numero utilizzando le proprietà di formattazione predefinite fornite dal sistema operativo dell'utente:

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

Il risultato varia in base alle impostazioni internazioni dell'utente e alle preferenze utente. Ad esempio, se le impostazioni internazionali dell'utente sono fr-FR il valore formattato sarà:

-123.456,789

Se desiderate formattare un numero per impostazioni internazionali specifiche, indipendentemente dalle impostazioni dell'utente, impostate il nome delle impostazioni internazionali in maniera specifica. Ad esempio:

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

Il risultato in questo caso è:

-123'456.789

Il metodo formatNumber() accetta un Numero come parametro. La classe NumberFormatter dispone anche di un metodo formatInt() che accetta un int come input, nonché di un metodo formatUint() che accetta un uint.

Potete controllare in maniera esplicita la logica di formattazione impostando proprietà della classe NumberFormatter, come mostrato in questo esempio:

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) 

Questo esempio crea innanzitutto un nuovo oggetto NumberFormatter e quindi:

  • imposta il formato numeri negativi per utilizzare parentesi (come nelle applicazioni finanziarie);

  • imposta il numero di cifre dopo il separatore decimale su 5;

  • specifica che gli zero finali devono essere utilizzati per assicurare cinque posizioni decimali;

  • imposta il separatore decimale su una virgola;

  • indica al formattatore di non utilizzare nessun separatore di gruppo.

Nota: quando alcune di queste proprietà cambiano, il formato del numero risultante non corrisponde più al formato preferito per le impostazioni internazionali specificate. Utilizzate alcune di queste proprietà solo quando la dipendenza dalle impostazioni internazionali non è importante; quando è necessario il controllo dettagliato su un singolo aspetto del formato, ad esempio il numero di zero finali; o quando l'utente richiede direttamente la modifica, ad esempio, tramite il pannello di controllo di Windows.

Analisi di stringhe contenenti valori numerici

La classe NumberFormatter può anche estrarre valori numerici da stringhe conformi a requisiti di formattazione specifici delle impostazioni internazionali. Il metodo NumberFormatter.parseNumber() estrae un singolo valore numerico da una stringa. Ad esempio:

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

Il metodo parseNumber() gestisce stringhe contenenti solo cifre e caratteri di formattazione numero, ad esempio segni meno e separatori. Se la stringa contiene altri caratteri, viene impostato un codice di errore:

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

Per estrarre numeri da stringhe contenenti caratteri alfabetici aggiuntivi, utilizzate il metodo 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

Il metodo parse() restituisce un oggetto NumberParseResult contenente il valore numerico sottoposto a parsing nella sua proprietà value. La proprietà startIndex indica l'indice del primo carattere numerico trovato. Potete utilizzare le proprietà startIndex e endIndex per estrarre le parti della stringa che precedono e seguono le cifre.