Getallen opmaken

Flash Player 10.1 of hoger, Adobe AIR 2.0 of hoger

De weergave van numerieke waarden varieert enorm van regio tot regio. Hier ziet u de notatie van het getal 123456,78 voor verschillende landinstellingen:

Landinstelling

Getalnotatie

en-US (Engels, Verenigde Staten)

-123,456.78

de-DE (Duits, Duitsland)

-123.456,78

fr-FR (Frans, Frankrijk)

-123 456,78

de-CH (Duits, Zwitserland)

-123'456.78

en-IN (Engels, India)

-1,23,456.78

Veel Arabische landinstellingen

123,456.78-

Veel factoren zijn van invloed op de getalnotatie, waaronder:

  • Scheidingstekens. Het decimale scheidingsteken staat tussen het gedeelte van het getal dat bestaat uit gehele cijfers en het breukgedeelte van het getal. Dit kan een punt, komma of ander teken zijn. Het groeperingsscheidingteken of scheidingsteken voor duizendtallen kan een punt, komma, vaste spatie of ander teken zijn.

  • Groeperingspatronen. Het aantal cijfers tussen elk groeperingsscheidingsteken links van de decimale komma kan twee, drie of een ander getal zijn.

  • Indicator voor negatieve getallen. Negatieve getallen kunnen worden aangeduid met een minteken links of rechts van het getal, of het getal kan tussen haakjes worden geplaatst bij financiële toepassingen. Het negatieve getal 19 komt voor als -19, 19- of (19).

  • Voorloopnullen en volgnullen. In sommige culturele conventies worden voorloopnullen of volgnullen toegevoegd aan de getalnotatie. Zo kan de waarde 0,17 onder andere worden weergegeven als ,17 of als 0,17 of 0,170.

  • Cijfersets. In veel talen, waaronder het Hindi, Arabisch en Japans worden verschillende cijfersets gebruikt. Het flash.globalization-pakket biedt ondersteuning voor alle cijfersets die kunnen worden toegewezen aan de cijfers 0-9.

Bij de notatie van numerieke waarden wordt met al deze factoren rekening gehouden door de klasse NumberFormatter.

De klasse NumberFormatter gebruiken

Met de NumberFormatter-klasse bepaalt u de notatie van numerieke waarden (van het type int, uint of Number) volgens de conventies van een bepaalde landinstelling.

Het volgende voorbeeld beschrijft de eenvoudigste manier om een getalnotatie toe te passen op basis van de standaardopmaakkenmerken van het besturingssysteem van de gebruiker:

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

Het resultaat is afhankelijk van de landinstellingen van de gebruiker en van de gebruikersvoorkeuren. Als de gebruiker de landinstelling fr-FR heeft, krijgt het getal de volgende notatie:

-123.456,789

Als u de getalnotatie alleen wilt baseren op een specifieke landinstelling, onafhankelijk van de gebruikersinstellingen, moet u de naam van de landinstelling specifiek instellen. Bijvoorbeeld:

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

In dit geval is het resultaat:

-123'456.789

De methode formatNumber() neemt een Number als parameter. De klasse NumberFormatter heeft ook een formatInt()-methode die een int neemt als invoer, en een formatUint()-methode die een uint neemt als invoer.

U kunt de logica voor de opmaak expliciet beheren door de eigenschappen van de klasse NumberFormatter in te stellen, zoals in dit voorbeeld:

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) 

In dit voorbeeld wordt eerst een NumberFormatter-object gemaakt, waarna de volgende stappen worden uitgevoerd:

  • als notatie voor negatieve getallen worden haakjes toegepast (zoals bij financiële toepassingen);

  • het aantal cijfers na het decimale scheidingsteken wordt ingesteld op 5;

  • volgnullen worden gebruikt om vijf decimale cijfers te garanderen;

  • het decimale scheidingsteken wordt ingesteld op een komma;

  • de notatiefunctie mag geen groeperingsscheidingstekens toepassen.

Opmerking: Wanneer sommige van deze eigenschappen veranderen, komt de resulterende getalnotatie niet meer overeen met de voorkeursnotatie voor de opgegeven landinstelling. Gebruik sommige van deze eigenschappen alleen wanneer de landinstellingen niet belangrijk zijn, bijvoorbeeld wanneer een enkel aspect van de notatie in detail moet worden beheerd, zoals het aantal volgnullen, of wanneer de gebruiker de wijziging direct heeft aangevraagd, bijvoorbeeld via het Windows Configuratiescherm.

Reeksen met numerieke waarden verwerken

Met de NumberFormatter-klasse kunt u ook numerieke waarden ophalen van tekenreeksen die voldoen aan de vereisten voor landspecifieke notaties. Met de methode NumberFormatter.parseNumber() haalt u een enkele numerieke waarde op van een tekenreeks. Bijvoorbeeld:

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

Met de methode parseNumber() kunt u tekenreeksen afhandelen die alleen cijfers en getalnotatietekens bevatten, zoals het minteken en scheidingstekens. Als de tekenreeks andere tekens bevat, wordt een foutcode ingesteld:

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

Als u getallen wilt extraheren uit tekenreeksen met extra alfabetische tekens, gebruikt u de NumberFormatter.parse()-methode:

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

De methode parse() retourneert een NumberParseResult-object met de geparseerde numerieke waarde in de value-eigenschap. De startIndex-eigenschap geeft de index aan van het eerste numerieke teken dat wordt aangetroffen. Met de eigenschappen startIndex en endIndex kunt u de gedeelten van de tekenreeks extraheren die voor en na de cijfers liggen.