Formatera tal

Flash Player 10.1 och senare, Adobe AIR 2.0 och senare

Visningsformatet för numeriska värden kan variera mycket mellan olika regioner. Här visas till exempel hur talet 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

fr-FR (franska, Frankrike)

-123 456,78

de-CH (tyska, Schweiz)

-123'456.78

en-IN (engelska, Indien)

-1,23,456.78

Många arabiska språkområden

123,456.78-

Det finns många faktorer som påverkar talformaten, till exempel:

  • Avgränsare. Decimalavgränsaren placeras mellan heltalet och delarna av ett tal. Det kan vara en punkt, ett komma eller ett annat tecken. Grupperingsavgränsaren eller tusendelsavgränsaren kan vara en punkt, ett komma, ett hårt blanksteg eller ett annat tecken.

  • Grupperingsmönster. Antalet siffror mellan grupperingsavgränsarna till vänster om decimalpunkten kan bestå av två, tre eller fler siffror.

  • Indikatorer för negativa tal. Negativa tal kan visas med ett minustecken till vänster eller till höger om talet, eller inom parentes för olika finansiella program. Det negativa talet 19 kan till exempel visas som -19, 19- eller (19).

  • Nollor före och efter talet. För vissa kulturella konventioner läggs nollor till före eller efter de visade talen. Värdet 0,17 kan till exempel visas som ,17, 0,17 eller 0,170 med mera.

  • Uppsättning siffertecken. Många språk, till exempel hindi, arabiska och japanska använder olika uppsättningar av siffertecken. I flash.globalization-paketet stöds alla uppsättningar siffertecken som motsvarar siffrorna 0–9.

Klassen NumberFormatter utgörs av alla dessa faktorer för formatering av numeriska värden.

Använda klassen NumberFormatter

Klassen NumberFormatter formaterar numeriska värden (av typen int, uint eller Number) enligt konventionerna för ett specifikt språkområde.

I följande exempel visas det lättaste sättet att formatera ett tal med hjälp av egenskaperna för standardformatering från användarens operativsystem:

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

Resultatet varierar beroende på användarens språkområdesinställningar och användarinställningar. Om användarens språkområde till exempel är fr-FR blir det formaterade värdet:

-123.456,789

Om du endast vill formatera ett tal för ett särskilt språkområde, oavsett användarens inställningar, anger du det språkområdet specifikt. Till exempel:

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

Resultatet i detta fall är:

-123'456.789

Metoden formatNumber() tar Number som en parameter. Klassen NumberFormatter har också en formatInt()-metod som tar en int som invärde och en formatUint()-metod som tar en uint.

Du kan kontrollera formateringslogiken explicit genom att ange egenskaper för klassen NumberFormatter, enligt exemplet nedan:

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) 

I det här exemplet skapas först ett NumberFormatter-objekt och sedan anges:

  • att negativa talformat ska använda parenteser (som i finansiella program),

  • att antalet siffror efter decimalavgränsaren är 5,

  • att nollor ska läggas till efter talet för att uppnå fem decimalplatser,

  • att decimalavgränsaren ska vara ett komma,

  • att inga grupperingsavgränsare ska användas.

Obs! När någon av dessa egenskaper ändras kommer talformatet inte längre motsvara det format som föredras för det angivna språkområdet. Använd dessa egenskaper endast när språkområdeskontrollen inte är viktig; när du behöver ha detaljerad kontroll över en enskild aspekt av formatet, till exempel antalet efterföljande nollor, eller när användaren begärde ändringen direkt, till exempel genom Kontrollpanelen i Windows.

Tolka strängar som innehåller numeriska värden

Klassen NumberFormatter kan också extrahera numeriska värden från strängar som följer språkområdesspecifika formateringskrav. Metoden NumberFormatter.parseNumber() extraherar ett numeriskt värde från en sträng. Till exempel:

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

Metoden parseNumber() hanterar strängar som endast innehåller siffror och talformaterande tecken, till exempel minustecken och avgränsare. Om strängen innehåller andra tecken kommer en felkod att anges:

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

Använd metoden NumberFormatter.parse() för att extrahera tal från strängar som innehåller andra alfabetiska tecken:

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

Metoden parse() returnerar ett NumberParseResult-objekt som innehåller det tolkade numeriska värdet i egenskapen för värde. Egenskapen startIndex indikerar index för det första numeriska tecknet som hittades. Du kan använda egenskaperna startIndex och endIndex om du vill extrahera de delar av strängen som finns före och efter siffrorna.