Formatieren von Zahlen

Flash Player 10.1 und höher, Adobe AIR 2.0 und höher

Das Format für die Anzeige numerischer Werte variiert stark je nach Region. Im Folgenden wird als Beispiel gezeigt, wie die Zahl 123456.78 in verschiedenen Gebietsschemas formatiert wird:

Ländereinstellung

Zahlenformat

en-US (Englisch, USA)

-123,456.78

de-DE (Deutsch, Deutschland)

-123.456,78

fr-FR (Französisch, Frankreich)

-123 456,78

de-CH (Deutsch, Schweiz)

-123'456.78

en-IN (Englisch, Indien)

-1,23,456.78

Zahlreiche arabische Gebietsschemas

123,456.78-

Zahlreiche Faktoren wirken sich auf die Zahlenformate aus, wie zum Beispiel:

  • Trennzeichen. Das Dezimaltrennzeichen befindet sich zwischen der Ganzzahl und dem Bruchteil einer Zahl. Es kann sich dabei um ein Komma, einen Punkt oder um ein anderes Zeichen handeln. Das Gruppentrennzeichen (Tausendertrennzeichen) kann ein Komma, ein Punkt, ein geschütztes Leerzeichen oder ein anderes Zeichen sein.

  • Gruppenmuster. Zwischen jedem Gruppentrennzeichen links vom Dezimaltrennzeichen können zwei, drei oder eine andere Anzahl Ziffern stehen.

  • Zeichen für negative Werte. Negative Werte können mit einem Minuszeichen links oder rechts von der Zahl gekennzeichnet sein. Im Finanzwesen stehen negative Werte häufig in Klammern. Die negative Zahl 19 kann beispielsweise folgendermaßen dargestellt werden: -19, 19- oder (19).

  • Führende und nachgestellte Nullen. In einigen regionalen Konventionen werden Zahlen mit führenden oder nachgestellten Nullen angezeigt. So sind für den Wert 0.17 unter anderem folgende Darstellungen möglich: .17, 0.17 oder 0.170.

  • Ziffernzeichensätze. Viele Sprachen, darunter Hindi, Arabisch und Japanisch, verwenden verschiedene Ziffernzeichensätze. Das flash.globalization-Paket unterstützt Ziffernzeichensätze, die den Ziffern 0-9 zugeordnet werden können.

Die NumberFormatter-Klasse berücksichtigt all diese Faktoren bei der Formatierung von numerischen Werten.

Verwenden der NumberFormatter-Klasse

Die NumberFormatter-Klasse formatiert numerische Werte (mit den int-, uint- und Number-Datentypen) gemäß den Konventionen eines bestimmten Gebietsschemas.

Das folgende Beispiel zeigt das einfachste Verfahren zur Formatierung einer Zahl unter Verwendung der standardmäßigen Formatierungseigenschaften, die vom Betriebssystem des Benutzers bereitgestellt werden:

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

Das Ergebnis richtet sich nach den Gebietsschema-Einstellungen und anderen Voreinstellungen des Benutzers. Wenn der Benutzer zum Beispiel das Gebietsschema fr-FR gewählt hat, wird der Wert folgendermaßen formatiert:

-123.456,789

Wenn Sie eine Zahl unabhängig von der Benutzereinstellung für ein bestimmtes Gebietsschema formatieren möchten, geben Sie den Namen des Gebietsschemas explizit an. Zum Beispiel:

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

Das Ergebnis lautet:

-123'456.789

Die formatNumber()-Methode akzeptiert eine Zahl mit dem Number-Datentyp als Parameter. Außerdem enthält die NumberFormatter-Klasse die formatInt()-Methode, die den int-Datentyp als Eingabe akzeptiert, und die formatUint()-Methode, die den uint-Datentyp akzeptiert.

Sie können die Formatierungslogik explizit steuern, indem Sie die Eigenschaften der NumberFormatter-Klasse festlegen, wie im folgenden Beispiel gezeigt:

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 diesem Beispiel wird zunächst ein NumberFormatter-Objekt erstellt. Dann werden die folgenden Schritte ausgeführt:

  • Das Format für negative Zahlen wird auf Klammern eingestellt (wie für Finanzanwendungen).

  • Die Anzahl der Stellen nach dem Dezimaltrennzeichen wird auf 5 eingestellt.

  • Über nachgestellte Nullen wird festgelegt, dass fünf Dezimalstellen angezeigt werden.

  • Als Dezimaltrennzeichen wird das Komma festgelegt.

  • Die Formatierungslogik wird angewiesen, keine Gruppentrennzeichen zu verwenden.

Hinweis: Wenn einige dieser Eigenschaften sich ändern, entspricht das resultierende Zahlenformat nicht mehr dem bevorzugten Format für das angegebene Gebietsschema. Einige dieser Eigenschaften sollten nur verwendet werden, wenn die Erkennung des Gebietsschemas nicht von Bedeutung ist, wenn ein bestimmter Aspekt des Formats, wie die Anzahl der nachgestellten Nullen, genau gesteuert werden muss, oder wenn der Benutzer die Änderung direkt anfordert, beispielsweise über die Windows-Systemsteuerung.

Analysieren von Strings mit numerischen Werten

Die NumberFormatter-Klasse kann auch numerische Werte aus Strings extrahieren, die den Formatierungsanforderungen eines bestimmten Gebietsschemas entsprechen. Die NumberFormatter.parseNumber()-Methode extrahiert einen einzelnen numerischen Wert aus einem String. Zum Beispiel:

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

Die parseNumber()-Methode verarbeitet Strings, die nur Ziffern und Zeichen für die Zahlenformatierung enthalten, wie Zeichen für negative Zahlen und Trennzeichen. Wenn der String andere Zeichen enthält, wird ein Fehlercode festgelegt:

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

Zum Extrahieren von Zahlen aus Strings, die auch alphabetische Zeichen enthalten, verwenden Sie die 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

Die parse()-Methode gibt ein NumberParseResult-Objekt zurück, das den analysierten numerischen Wert in seiner Werteigenschaft enthält. Die startIndex-Eigenschaft gibt den Index des ersten gefundenen numerischen Zeichens an. Mithilfe der startIndex- und endIndex-Eigenschaften können Sie die Teile des Strings extrahieren, die vor und nach den Ziffern stehen.