Rumah > Soal Jawab > teks badan
P粉2758839732023-08-09 10:40:33
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
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.