通貨の値の形式の設定

Flash Player 10.1 以降、Adobe AIR 2.0 以降

通貨の値の表示形式は、数字と同じように大きく異なります。例えば、米ドルの値 $123456.78 の形式を特定のロケールで設定すると、次のようになります。

ロケール

数値形式

en-US(英語、米国)

$123,456.78

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

123.456,78 $

en-IN(英語、インド)

$ 1,23,456.78

通貨の形式では、数値の形式と同じすべての要素に加えて、次の要素が関連します。

  • 通貨の ISO コード。使用されている実際のロケールに対する 3 文字の ISO 4217 通貨コード(USD、EUR など)。

  • 通貨記号。使用される実際のロケールの通貨記号または文字列($、€ など)。

  • マイナスの通貨形式。通貨額の数値部分に関連する通貨記号とマイナス記号または括弧の位置を定義します。

  • プラスの通貨形式。通貨額の数値部分に関連する通貨記号の位置を定義します。

CurrencyFormatter クラスの使用

CurrencyFormatter クラスは、特定のロケールの表記規則に従って、数値の形式を、通貨文字列と形式が設定された数字を含む文字列に設定します。

新しい CurrencyFormatter オブジェクトをインスタンス化すると、このオブジェクトにより、通貨は特定のロケールのデフォルトの通貨に設定されます。

次の例では、ドイツ語ロケールを使用して作成された CurrencyFormatter オブジェクトにより、通貨額がユーロであると見なされています。

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

ほとんどの場合、ロケールのデフォルトの通貨に依存しないでください。ユーザーのデフォルトのロケールがサポートされていない場合、CurrencyFormatter クラスは代替ロケールを割り当てます。代替ロケールには、異なるデフォルトの通貨を設定できます。さらに、額がユーザーの地域の通貨でない場合であっても、通貨形式がユーザーに対して正しく表示されるようにしたいと考えるのが通常です。例えば、カナダのユーザーは、ドイツの企業の価格をユーロで表示するが、カナダのスタイルで形式が設定されることを望みます。

CurrencyFormatter.setCurrency() メソッドは、正確な通貨文字列と使用する通貨記号を指定します。

次の例では、カナダのフランス語圏のユーザーに対して、通貨をユーロで表示します。

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

setCurrency() メソッドを使用すると、一義的な通貨記号を設定して混乱を避けることもできます。次に、例を示します。

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

デフォルトでは、format() メソッドは、通貨記号の代わりに 3 文字の ISO 4217 通貨コードを表示します。ISO 4217 コードは一義的で、ローカリゼーションの必要はありません。ただし、多くのユーザーは、ISO コードではなく通貨記号を表示することを望みます。

CurrencyFormatter クラスは、形式を設定された通貨文字列で通貨記号(ドル記号、ユーロ記号など)または 3 文字の ISO 通貨文字列(USD、EUR など)のどちらを使用するかを決定するうえで役立ちます。例えば、カナダドルの金額を、カナダのユーザーには $200 と表示できます。一方、米国のユーザーには CAD 200 と表示できます。ユーザーのロケール設定を基にして、額の通貨記号をあいまいまたは不正確にするかどうかを決定するには、formattingWithCurrencySymbolIsSafe() メソッドを使用します。

次の例では、ユーロの値を en-US ロケールの形式に設定します。ユーザーのロケールに応じて、出力文字列は ISO 通貨コードまたは通貨記号を使用します。

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 
}

通貨値を含む文字列の解析

CurrencyFormatter クラスは、入力文字列から、ロケールに固有の形式の設定要件に適合する通貨額と通貨文字列を抽出することもできます。CurrencyFormatter.parse() メソッドは、次に示すように、解析された額および通貨文字列を CurrencyParseResult オブジェクトに格納します。

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

入力文字列の通貨文字列部分には、通貨記号、通貨の ISO コード、追加のテキスト文字が含まれます。通貨文字列、マイナス記号、数値の位置は、negativeCurrencyFormat プロパティおよび positiveCurrencyFormat プロパティで指定された形式に一致します。次に、例を示します。

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 $                

この例では、入力文字列には通貨文字列に続いてマイナス記号と数字があります。ただし、en-US ロケール用のデフォルトの negativeCurrencyFormat 値では、先頭にマイナス記号が挿入されることが指定されます。その結果、parse() メソッドはエラーを生成し、解析値は NaN になります。

negativeCurrencyFormat を 2 に設定すると(通貨文字列が最初にくることを指定します)、parse() メソッドは成功します。