Betulkan isu format mata wang dalam PHP
P粉322319601
P粉322319601 2023-08-08 22:10:55
0
1
661
<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>
P粉322319601
P粉322319601

membalas semua(1)
P粉275883973

31.005 sebenarnya antara dua nombor, lihat ketepatan titik terapung di https://php.net/float.

> ini_set('precision', 23)
= "14"

> 31.005
= 31.00499999999999900524

(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.

$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);

$formatter->setAttribute(
    NumberFormatter::ROUNDING_MODE, 
    NumberFormatter::ROUND_HALFUP
);


echo $formatter->formatCurrency(31.005, 'USD'), "\n";
# Output: .01

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

$formatter = new NumberFormatter('en', 2);
$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan