Valutawaarden opmaken

Flash Player 10.1 of hoger, Adobe AIR 2.0 of hoger

De notaties voor valutawaarden variëren, net als getalnotaties. Hier ziet u de notatie voor het bedrag $123456,78 voor verschillende landinstellingen:

Landinstelling

Getalnotatie

en-US (Engels, Verenigde Staten)

$123,456.78

de-DE (Duits, Duitsland)

123.456,78 $

en-IN (Engels, India)

$ 1,23,456.78

Bij de notatie van valuta's zijn dezelfde factoren betrokken als bij de getalnotatie, plus de volgende factoren:

  • ISO-code voor valuta's. De ISO 4217-valutacode bestaat uit drie letters en geeft de landinstelling aan die wordt gebruikt, zoals USD of EUR.

  • Valutasymbool. Het valutasymbool of de tekenreeks voor de werkelijk gebruikte landinstelling, zoals € of $.

  • Notatie voor negatieve valutabedragen. Hiermee wordt de locatie bepaald van het valutasymbool en het negatieve symbool of haakjes in verband met het numerieke deel van het valutabedrag.

  • Notatie voor positieve valutabedragen. Hiermee wordt de locatie bepaald van het valutasymbool ten opzichte van het numerieke onderdeel van het valutabedrag.

De klasse CurrencyFormatter gebruiken

Met de CurrencyFormatter-klasse kunt u numerieke waarden noteren als tekenreeksen waarin valutatekenreeksen en opgemaakte getallen zijn opgenomen, conform de conventies van een bepaalde landinstelling.

Wanneer u een nieuw CurrencyFormatter-object instantieert, wordt de standaardvaluta voor de desbetreffende landinstelling ingesteld.

In het volgende voorbeeld ziet u dat bij een CurrencyFormatter-object dat met een Duitse landinstelling is gemaakt, wordt aangenomen dat het valutabedrag in euro staat:

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

In de meeste gevallen moet u niet uitgaan van de standaardvaluta voor een landinstelling. Als de standaardlandinstelling van de gebruiker niet wordt ondersteund, wordt door de CurrencyFormatter-klasse een andere landinstelling als fallback toegewezen. Bij deze fallback kan een andere standaardvaluta van toepassing zijn. Bovendien wilt u waarschijnlijk ook dat de valutanotaties correct zijn in de ogen van de gebruiker, zelfs als de bedragen niet in de lokale valuta van de gebruiker staan. Zo wil een Canadese gebruiker bijvoorbeeld dat bedragen voor een Duits bedrijf in euro worden weergegeven, maar worden opgemaakt volgens de Canadese stijl.

De methode CurrencyFormatter.setCurrency() geeft de exacte valutatekenreeks en -symbool die moeten worden gebruikt.

In het volgende voorbeeld worden valutabedragen in euro weergegeven voor gebruikers in het Franse gedeelte van Canada:

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

Met de methode setCurrency() voorkomt u verwarring doordat u niet-ambigue valutasymbolen toepast. Bijvoorbeeld:

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

De methode format() geeft standaard een ISO 4217-valutacode weer die uit drie tekens bestaat, in plaats van het valutasymbool. ISO 4217-codes zijn niet ambigu en vereisen geen lokalisatie. Veel gebruikers geven echter de voorkeur aan valutasymbolen en niet aan de ISO-codes.

Met de CurrencyFormatter-klasse kunt u beter bepalen welk symbool moet worden gebruikt in een opgemaakte valutatekenreeks: een valutasymbool, zoals het dollar- of eurosymbool, of een ISO-valutatekenreeks die uit drie tekens bestaat, zoals USD of EUR. Een bedrag in Canadese dollars kan bijvoorbeeld worden weergegeven als $200 voor een gebruiker in Canada. Voor een gebruiker in de Verenigde Staten kan dit bedrag worden weergegeven als CAD 200. Met de methode formattingWithCurrencySymbolIsSafe() kunt u nagaan of het valutasymbool van het bedrag ambigu of onjuist is, gezien de landinstellingen van de gebruiker.

In het volgende voorbeeld wordt een waarde in euro opgemaakt in een notatie voor de landinstelling en-US. Afhankelijk van de landinstelling van de gebruiker, wordt bij de uitvoertekenreeks ofwel de ISO-valutacode of het valutasymbool toegepast.

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 
}

Reeksen met valutawaarden verwerken

Met de CurrencyFormatter-klasse kunt u ook een valutabedrag en -tekenreeks ophalen van een invoertekenreeks die voldoet aan de specifieke vereisten voor de notatie van de landinstelling. De methode CurrencyFormatter.parse() slaat het geparseerde bedrag en de valutatekenreeks op in een CurrencyParseResult-object, zoals hier wordt aangegeven:

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

Het valutatekenreeksgedeelte van de invoertekenreeks kan een valutasymbool, een ISO-valutacode en extra teksttekens bevatten. De posities van de valutatekenreeks, de indicator voor een negatief bedrag en de numerieke waarde komen overeen met de notaties die zijn opgegeven door de eigenschappen negativeCurrencyFormat en positiveCurrencyFormat. Bijvoorbeeld:

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 dit voorbeeld bestaat de invoertekenreeks uit een valutatekenreeks, gevolgd door een minteken en een bedrag. Volgens de standaardwaarde voor negativeCurrencyFormat voor de landinstelling en-US moet de negatieve indicator echter vooraan staan. Als gevolg hiervan genereert de parse()-methode een fout en is de geparseerde waarde NaN.

Nadat de waarde van negativeCurrencyFormat is ingesteld op 2, waarmee wordt aangegeven dat de valutatekenreeks vooraan staat, kan de parse()-methode succesvol worden uitgevoerd.