PHP NumberFormatterクラスを使用して通貨値を出力しています。
例えば:
$cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
$cFormatter->formatCurrency(123, 'USD');
$cFormatter->formatCurrency(123, 'BRL');
$cFormatter->formatCurrency(123, 'GBP');
これは正常に機能し、期待どおりにそれぞれ" "$123.00
、"R$123.00
"、"を返します。"£123.00
ただし、負の数は、先頭のマイナス "-" ではなく、括弧で囲まれた "会計スタイル" で出力されます。
例えば:
$cFormatter->formatCurrency(-456, 'USD');
を返します"($456.00)"
が、私は欲しいです"-$456.00"
。確かにこれを行う簡単な方法はありますか?
次のように接頭辞と接尾辞をオーバーライドすることで、括弧を削除できます。
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
しかし、その後、通貨記号が表示されません"-456.00"
。
NEGATIVE_PREFIX 属性を設定するときに使用する必要がある通貨記号のエスケープ コードはありますか?
編集:探している結果が得られる場合は、別のロケールを設定して喜んでいます。
編集 2: Intl ライブラリのドキュメント(NumberFormatter の実装に使用されるライブラリ) を見ると、次のものが有望に見えました。
¤ (\u00A4) : プレフィックスまたはサフィックス : 通貨記号なし、通貨記号に置き換え。2 倍の場合は、国際通貨記号に置き換えられます。3 倍になっている場合は、通貨の複数形の名前に置き換えられます。たとえば、「US ドル」やアメリカの「US ドル」などです。パターンに存在する場合、小数点記号の代わりに通貨の小数点記号が使用されます。
でもこれは:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
「-¤123」と出力するだけなので、喜びはありません。
編集 3:答えが見つかったと思います。以下を参照してください。