numfmt_format_currency(new NumberFormatter('en',2), 31.005, "USD")
このコードは $31.00 を出力します。しかし、$31.01 が出力されるはずです。この問題を解決するにはどうすればよいですか?このコードは $31.00 を出力します。ただし、$31.01 が出力されるはずです。この問題をどうやって解決すればいいでしょうか? ?
PHP は、価格形式の 0.005 から 0.01 への変換を無視します。
Magento の通貨形式の問題を解決しようとしましたが、PHP に問題が見つかりました
31.005 は実際には 2 つの数値の間にあります。https://php.net/float で浮動小数点の精度を参照してください。
リーリー(PHP やその他の言語では、31.005..という数字はありません)
表示要件に合わせて、十分な精度で、できるだけ誤差を少なくした数値を指定する必要があります。これは、丸めモードを指定することで実現できます。たとえば、31.005 を 31.01 に丸める場合は、切り上げまたは切り捨てを選択できます。
リーリー
これはdroopsnootのコメントです 数値書式設定のデフォルトモードと作成 Olivier がコメントで思い出したように、デフォルトのモードは半偶数丸めであり、バンカーの丸めとも呼ばれます。 同時に、彼らは、マジックナンバー 2を使用する代わりに、クラス定数 NumberFormatter::CURRENCY を使用する方が「より正式」であると指摘しました。## リーリー
これにより、コードの通信が向上します。そうでないと、数値 2 が桁数または精度として解釈される可能性がありますが、この場合は当てはまりません。すべてのスタイル定数は PHP マニュアルで見つけることができます。 注: これは PHP 固有の問題だけではありません。これらの数値を Javascript に渡し、JavaScript でフォーマットする必要がある場合にも同じ問題が発生します。