2017-11-17 13 views
1

なぜ次の2行はなぜNumberFormatterは、フォーマットの金融小数の桁数をドロップしない()

$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY); 
echo $fmt->format(12.34, NumberFormatter::CURRENCY); 

出力$12.00

+0

私は承知しています '$ fmt-> formatCurrency()'の数字を削除しませんが、私はそれが$ fmt-> 'を経由して通貨記号を上書きすることができますので、' '形式を()を使用したいのですがsetSymbol() ' –

+0

神の愛のためには、フロートとしてお金を保管しないでください。[moneyphp/money](https://packagist.org/packages/moneyphp/money)のような正しいライブラリを使用してください。浮動小数点の不正確さのために。 – Sammitch

+0

@Sammitch私はそれを知っていますが、NumberFormatterを使用するにはフロートに変換する必要があります。 –

答えて

0

format()の第2引数にNumberFormatter::CURRENCY定数を使用しているからです。

NumberFormatterのドキュメントのpredefined constantsセクションでは、定数をどのメソッドで使用するかをグループ化しています。

NumberFormatter::CURRENCYは、2の値を持ち、フォーマッタの作成時に使用する必要があります。 format()ファンクションの2の値はNumberFormatter::TYPE_INT64に対応します。

format(12.34)を2番目の引数なしで呼び出すことができます。

$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY); 
echo $fmt->format(12.34); 
+0

ありがとう、私は定数を誤用することに気付かなかった。 2番目の引数がなければ、実際には期待どおりに動作します。 –

関連する問題