Betulkan isu format mata wang dalam PHP
P粉322319601
2023-08-08 22:10:55
<p><kod>numfmt_format_currency(new NumberFormatter('en',2), 31.005, "USD")</code> Tetapi kod ini sepatutnya menghasilkan $31.01. Kod ini mencetak $31.00. Tetapi $31.01 sepatutnya dikeluarkan. bagaimana untuk menyelesaikan masalah ini? ? </p><p>PHP mengabaikan penukaran 0.005 kepada 0.01 dalam format harga. </p><p>Saya cuba membetulkan isu pemformatan mata wang Magento tetapi menemui masalah dengan PHP</p><p><br /></p>
31.005 sebenarnya antara dua nombor, lihat ketepatan titik terapung di https://php.net/float.
(Dalam PHP dan bahasa lain, tiada nombor 31.005..)
Anda perlu menyediakan nombor dengan ketepatan yang mencukupi, tetapi dengan ralat sesedikit mungkin, untuk memadankan keperluan paparan anda. Ini boleh dicapai dengan menentukan mod pembundaran, contohnya, jika anda ingin membundarkan 31.005 hingga 31.01, anda boleh memilih untuk membundarkan ke atas atau ke bawah.
Ini adalah ulasan droopsnoot
Mod lalai pemformatan nombor dan penciptaan
Seperti yang diingatkan oleh Olivier dalam ulasan, mod lalai ialah pembundaran separa genap, juga dikenali sebagai pembundaran jurubank.
Selain itu, mereka menegaskan bahawa adalah "lebih formal" untuk menggunakan pemalar kelas NumberFormatter::CURRENCY daripada menggunakan nombor ajaib 2
Ini akan membolehkan kod anda berkomunikasi dengan lebih baik, jika tidak, nombor 2 mungkin ditafsirkan sebagai bilangan digit atau ketepatan nombor, tetapi itu tidak berlaku dalam kes ini. Anda boleh menemui semua pemalar gaya dalam manual PHP.
Nota: Ini bukan hanya masalah khusus PHP, anda akan menghadapi masalah yang sama apabila anda menghantar nombor ini ke Javascript dan perlu memformatkannya dalam Javascript.