Formatera valutavärden

Flash Player 10.1 och senare, Adobe AIR 2.0 och senare

Visningsformaten för valutavärden varierar lika mycket som talformat. Här visas till exempel hur värdet 123456,78 $ formateras för olika språkområden:

Språk

Talformat

en-US (engelska, USA)

$123,456.78

de-DE (tyska, Tyskland)

123.456,78 $

en-IN (engelska, Indien)

$ 1,23,456.78

Valutaformatering styrs av samma faktorer som för talformatering, samt några faktorer till:

  • ISO-kod för valuta. ISO 4217-valutakoden, tre bokstäver, för det språk som faktiskt används, till exempel USD eller EUR.

  • Valutasymbol. Valutasymbolen eller strängen för det språk som faktiskt används, till exempel $ eller €.

  • Negativt valutaformat. Definierar placeringen av valutasymbolen och den negativa symbolen eller parentesen i förhållande till den numeriska delen av valutabeloppet.

  • Positivt valutaformat. Definierar placeringen av valutasymbolen i förhållande till den numeriska delen av valutabeloppet.

Använda klassen CurrencyFormatter

Klassen CurrencyFormatter formaterar numeriska värden till strängar som innehåller valutasträngar och formaterade tal, i enlighet med konventionerna för ett visst språkområde.

När du instansierar ett nytt CurrencyFormatter-objekt, anges valutan till standardvalutan för språkområdet.

I följande exempel visas att ett CurrencyFormatter-objekt som skapats med det tyska språkområdet utgår från att valutabelopp ska vara i euro:

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

Det är oftast bäst att inte förlita sig på standardvalutan för ett språkområde. Om användarens standardspråkområde inte stöds tilldelar klassen CurrencyFormatter ett alternativt språkområde. Det alternativa språkområdet kanske har en annan standardvaluta. Dessutom är det ofta viktigt att valutaformat ser korrekta ut för användaren, även om beloppen inte anges i användarens lokala valuta. En kanadensisk användare kanske vill se ett tyskt företags priser i euro, men formaterade enligt det kanadensiska formatet.

Metoden CurrencyFormatter.setCurrency() anger exakt vilken valutasträng och valutasymbol som ska användas.

I följande exempel visas valutabelopp i euro för användare i den fransktalande delen av Kanada:

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

Metoden setCurrency() kan också användas för större tydlighet genom användning av entydiga valutasymboler. Till exempel:

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

Som standard visar metoden format() en ISO 4217-valutakod som består av tre bokstäver, istället för en valutasymbol. ISO 4217-koder är entydiga och kräver ingen lokalisering. Men många användare föredrar valutasymboler istället för ISO-koder.

Klassen CurrencyFormatter kan hjälpa dig att avgöra vilken formaterad valutasträng som ska användas för en valutasymbol, till exempel ett dollartecken eller eurotecken, eller en ISO-valutasträng med tre bokstäver, till exempel USD eller EUR. Ett belopp i kanadensiska dollar kan visas som $200 för en användare i Kanada. För en användare i USA kommer det emellertid att visas som CAD 200. Använd metoden formattingWithCurrencySymbolIsSafe() för att avgöra om beloppets valutasymbol blir oklar eller felaktig beroende på användarens språkområdesinställningar.

I exemplet nedan formateras ett värde i euro till ett format för språkområdet en-US. Beroende på användarens språkområde används för utdatasträngen antingen ISO-valutakoden eller valutasymbolen.

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 
}

Tolka strängar som innehåller valutavärden

Klassen CurrencyFormatter kan också extrahera ett valutabelopp och en valutasträng från en indatasträng som följer en språkområdesspecifik formatering. Metoden CurrencyFormatter.parse() lagrar det tolkade beloppet och valutasträngen i ett CurrencyParseResult-objekt, enligt exemplet nedan:

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

Delen med valutasträngen i indatasträngen kan innehålla en valutasymbol, en ISO-valutakod och andra tecken. Placeringen av valutasträngen, indikatorn för negativa tal samt det numeriska värdet, överensstämmer med formaten som anges av egenskaperna negativeCurrencyFormat och positiveCurrencyFormat. Till exempel:

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 $                

I det här exemplet innehåller indatasträngen en valutasträng som följs av ett minustecken och ett tal. Men standardvärdet för negativeCurrencyFormat för språkområdet en-US är att indikatorn för negativa tal ska anges först. Därför genererar metoden parse() ett fel och det tolkade värdet blir ”NaN”.

När negativeCurrencyFormat anges till 2, vilket innebär att valutasträngen kommer först lyckas parse()-metoden.