Formattazione di valori valuta

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

I formati di visualizzazione dei valori valuta variano tanto quanto i formati dei numeri. L'esempio seguente mostra come viene formattato il valore $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 $

en-IN (Inglese, India)

$ 1,23,456.78

La formattazione valuta comprende gli stessi fattori della formattazione numeri, più i fattori aggiuntivi seguenti:

  • Codice ISO valuta. Il codice valuta ISO 4217 a tre lettere per le impostazioni internazionali effettive utilizzate, ad esempio USD o EUR.

  • Simbolo valuta. Il simbolo o la stringa di valuta corrispondente alle impostazioni internazionali effettivamente utilizzate, ad esempio $ o €.

  • Formato valuta negativo. Definisce la posizione del simbolo di valuta e del simbolo negativo o delle parentesi rispetto alla parte numerica dell'importo in valuta.

  • Formato valuta positivo. Definisce la posizione del simbolo di valuta rispetto alla parte numerica dell'importo in valuta.

Uso della classe CurrencyFormatter

La classe CurrencyFormatter consente di formattare valori numerici in stringhe contenenti stringhe di valuta e numeri formattati, in base alle convenzioni di impostazioni internazionali specifiche.

Quando create un'istanza di un nuovo oggetto CurrencyFormatter, la valuta viene impostata sul valore predefinito per le impostazioni internazionali specificate.

Nell'esempio seguente viene mostrato che l'oggetto CurrencyFormatter creato utilizzando le impostazioni internazioni del tedesco presume che gli importi valuta siano in Euro:

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

Nella maggior parte dei casi non basatevi sulla valuta predefinita per le impostazioni internazionali. Se le impostazioni internazionali predefinite dell'utente non sono supportate, la classe CurrencyFormatter assegna impostazioni internazionali di fallback. Le impostazioni internazionali di fallback potrebbero avere una valuta predefinita diversa. Inoltre, occorre in genere che l'aspetto dei formati valuta sia corretto per l'utente, anche se gli importi non compaiono nella valuta locale dell'utente. Ad esempio, è possibile che un utente canadese desideri vedere i prezzi di un'azienda tedesca in Euro, ma formattati nello stile canadese.

Il metodo CurrencyFormatter.setCurrency() specifica la stringa di valuta e il simbolo valuta da utilizzare.

Nell'esempio seguente vengono mostrati gli importi valuta in Euro a utenti della regione francofona del Canada:

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

Il metodo setCurrency() può anche essere utilizzato per ridurre la confusione impostando simboli valuta non ambigui. Ad esempio:

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

Per impostazione predefinita il metodo format() visualizza un codice valuta ISO 4217 di tre caratteri anziché il simbolo di valuta. I codici ISO 4217 sono univoci e non richiedono la localizzazione. Tuttavia molti utenti preferiscono vedere simboli di valuta anziché codici ISO.

La classe CurrencyFormatter consente di scegliere il simbolo utilizzato da una stringa di valuta formattata: un simbolo valuta, come un simbolo di dollaro o un simbolo di euro, o una stringa di valuta ISO a tre caratteri, ad esempio USD o EUR. Ad esempio, un importo in dollari canadesi può essere visualizzato come $200 per un utente in Canada, ma come CAD 200 per un utente negli Stati Uniti. Utilizzate il metodo formattingWithCurrencySymbolIsSafe() per determinare se il simbolo di valuta dell'importo sarà ambiguo o errato in base alle impostazioni internazionali dell'utente.

Nell'esempio seguente, un valore in Euro viene formattato nelle impostazioni internazionali en-US. In base alle impostazioni internazionali dell'utente, la stringa di output utilizza il codice valuta ISO o il simbolo di valuta.

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 
}

Parsing di stringhe contenenti valori di valuta

La classe CurrencyFormatter può anche estrarre un importo valuta e una stringa di valuta da una stringa di input conforme a requisiti di formattazione specifici delle impostazioni internazionali. Il metodo CurrencyFormatter.parse() memorizzata l'importo sottoposto a parsing e la stringa di valuta in un oggetto CurrencyParseResult, come mostrato di seguito:

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 stringa di valuta della stringa di input può contenere un simbolo di valuta, codice valuta ISO e caratteri di testo aggiuntivi. Le posizioni della stringa di valuta, l'indicatore di numero negativo e il valore numerico, devono corrispondere ai formati specificati dalle proprietà negativeCurrencyFormat e positiveCurrencyFormat. Ad esempio:

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 $                

In questo esempio, la stringa di input contiene una stringa di valuta seguita da un segno meno e un numero. Tuttavia, il valore negativeCurrencyFormat delle impostazioni internazionali en-US specifica che l'indicatore di numero negativo deve precedere il resto. Di conseguenza, il metodo parse() genera un errore e il valore sottoposto a parsing è NaN.

Dopo aver impostato negativeCurrencyFormat su 2, che specifica che la stringa di valuta precede il resto, il metodo parse() va a buon fine.