数値の形式の設定

Flash Player 10.1 以降、Adobe AIR 2.0 以降

数値の表示形式は地域によって大きく異なります。例えば、特定のロケールでは数値 123456.78 は次のように形式が設定されます。

ロケール

数値形式

en-US(英語、米国)

-123,456.78

de-DE(ドイツ語、ドイツ)

-123.456,78

fr-FR(フランス、フランス語)

-123 456,78

de-CH (ドイツ語、スイス)

-123'456.78

en-IN(英語、インド)

-1,23,456.78

多くのアラビア語ロケール

123,456.78-

数値形式には、次の示すものを含めて多くの要素が影響します。

  • 区切り文字。小数点区切り文字は、数値の整数部分と小数部分の間に配置されます。これは、ピリオド、カンマまたはその他の文字の場合があります。グループの区切り文字または 1000 の区切り文字は、ピリオド、カンマ、改行しないスペースまたは別の文字の場合があります。

  • グループのパターン。小数点より左にある各グループ区切り文字間の桁数は、2 桁、3 桁またはその他の値の場合があります。

  • マイナスの数値の表示。マイナスの数値は、数値の左または右にマイナス記号を付けて表示するか、または財務アプリケーションでは括弧内に表示する場合があります。例えば、マイナス 19 は -19、19- または (19) と表示されます。

  • 先頭および末尾のゼロ一部の文化上の表記規則では、表示される値に先頭または末尾のゼロが追加されます。例えば、値 0.17 は .17、0.17、0.170 などのように表示されます。

  • 異なる数字のセット。ヒンズー語、アラビア語、日本語など多くの言語では、異なる数字のセットが使用されます。flash.globalization パッケージは、0 ~ 9 にマップされる任意の数字をサポートしています。

NumberFormatter クラスでは、数値の形式を設定するときに、これらの要素がすべて考慮されます。

NumberFormatter クラスの使用

NumberFormatter クラスは、特定のロケールの表記規則に従って、数値(int、uint、または Number タイプ)の形式を設定します。

次の例は、ユーザーのオペレーティングシステムで提供されるデフォルトの形式プロパティを使用して数値の形式を設定するための、最も簡単な方法を示しています。

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

この結果は、ユーザーのロケール設定およびユーザー環境設定に応じて異なります。例えば、ユーザーのロケールが fr-FR の場合、設定される値は次のようになります。

-123.456,789

ユーザーの設定に関わらず、特定のロケール用に数値の形式を設定するだけの場合は、ロケール名を固有に設定します。次に、例を示します。

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

この結果は次のようになります。

-123'456.789

formatNumber() メソッドは、Number をパラメーターとして受け取ります。NumberFormatter クラスには、int を入力として受け取る formatint() メソッドと、unit を入力として受け取る formatUnit() メソッドがあります。

この例に示すように、NumberFormatter クラスのプロパティを設定することにより、形式の設定ロジックを明示的に制御できます。

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) 

この例では、最初に NumberFormatter オブジェクトを作成し、次のことを行います。

  • マイナスの数値の形式を設定して、財務アプリケーションと同様に括弧を使用するようにします。

  • 小数点区切り文字の後の数値を 5 に設定します。

  • 5 桁であることを確実にするために、末尾のゼロを使用することを指定します。

  • 小数点区切り文字をカンマに設定します。

  • グループ区切り文字を使用しないように指定します。

注意: これらのプロパティの一部を変更すると、結果の数値形式は、指定されたロケールの形式に対応しなくなります。これらのプロパティは、ロケールへの対応が重視されない場合にのみ使用します。例えば、末尾に挿入するゼロの数など、数値形式の 1 つの側面のみを詳細に制御する必要がある場合や、ユーザーが Windows コントロールパネルから変更を直接要求している場合にのみ使用します。

数値を含む文字列の解析

NumberFormatter クラスは、ロケールに固有の形式要件に適合する文字列から数値を抽出することもできます。NumberFormatter.parseNumber() メソッドは、文字列から単一の数値を抽出します。次に、例を示します。

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

parseNumber() メソッドは、数字と、マイナス記号、区切り文字など数値の形式を設定する文字のみを含む文字列を処理します。文字列にそれら以外の文字が含まれていると、エラーコードが設定されます。

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

その他のアルファベット文字を含む文字列から数字を抽出するには、NumberFormatter.parse() メソッドを使用します。

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

parse() メソッドは、解析された数値を値プロパティに含む NumberParseResult オブジェクトを返します。startIndex プロパティは、見つかった最初の数字のインデックスを示します。startIndex プロパティおよび endIndex プロパティを使用すると、数字の前および後の文字列部分を抽出できます。