どうやっていけばいいですか?numberにはnumberformatterを印刷負の通貨価値はマイナス記号を付け?
-
18-09-2019 - |
質問
を使用しているPHP Numberには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"
.確かに簡単にわかる方法?
私は取り外し可能なブラケットによるオーバーライドの接頭辞やpostfixとして
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
もしませんの通貨記号の例 "-456.00"
.
あの脱出のためのコードの通貨記号による設定したい場合はNEGATIVE_PREFIX属性?
編集: 嬉しいセットを異なるロケールの場合、この結果もやってみたいです。
編集2: を見る 国際図書館docs の図書館を実装するのに使われているのnumberにはnumberformatterに見:
¤(\u00A4):接頭辞や接尾辞:ない通貨記号で置換される通貨シンボルです。さ倍増で置換される国際通貨シンボルです。さ倍増で置換される通貨に複数の名前を、例えば、"米ドル"または"米ドル"です。存在する場合のパターンは、通貨桁区切り子が使用されているのは、小数点セパレーターが不要になる。
この:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
で印刷"-¤123"な喜びです。
編集3: 私の答えを見つけたのだ、下記を参照してください。
解決
がその場で発音を確認することが少し少hacky道を曲げロケールがen_USの動きは私が求めていたもの getPattern() / setPattern() ます。
$cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
$sPattern = $cFormatter->getPattern(); // returns "¤#,##0.00;(¤#,##0.00)";
$sMyPattern = "¤#,##0.00;-¤#,##0.00";
$cFormatter->setPattern($sMyPattern);
$cFormatter->formatCurrency(-456, 'USD'); // returns -$456.00
他のヒント
のようにしていくのでしょうか。ちょっと荒点の定位ができます。以降、需のドル記号としているパターンであり続けたいと願っての最初の番号ではない各通貨です。除去したい場合は、括弧いうような,
$locale = 'en_US';
$nf = new \NumberFormatter($locale, \NumberFormatter::CURRENCY);
$nf->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $decimals);
$pattern = str_replace(array('(',')'),'',$nf->getPattern());
$nf->setPattern($pattern);
echo $nf->format($number);
単にできる
$cFormatter->setTextAttribute(NumberFormatter::PAD_BEFORE_PREFIX, '-$')."\n";