Mengapa Pengiraan Terapung PHP Saya Menghasilkan \'ralat\' Daripada \'kejayaan\'?

Linda Hamilton
Lepaskan: 2024-10-30 16:44:03
asal
599 orang telah melayarinya

Why Does My PHP Float Calculation Result in

Kesalahan Ketepatan Terkenal Pengiraan Apungan PHP

Apabila mengendalikan data berangka, ketepatan adalah yang terpenting. Walau bagaimanapun, jenis data apungan PHP boleh menjadi terkenal rumit, membawa kepada ketidaktepatan yang tidak dijangka dalam pengiraan.

Pertimbangkan coretan PHP berikut:

<code class="php">$fooValue = 100.68;
$cowValue = 100.67;

$diffValue = $fooValue - $cowValue;
if($diffValue <= 0.01) {
    echo("success");
} else {
    echo("error");
}</code>
Salin selepas log masuk

Kami terkejut, kod ini mencetak "ralat" dan bukannya "kejayaan" yang dijangkakan.

Punca: Ketidaktepatan Terapung

Penyebabnya ialah ketidaktepatan yang wujud pada jenis data apungan. Apabila menukar kepada dan dari binari, ketepatan mungkin hilang. Oleh itu, membandingkan nilai apungan untuk kesaksamaan tepat mungkin tidak boleh dipercayai.

Penyelesaian untuk Pengiraan Ketepatan

Untuk menyelesaikan isu ini, pertimbangkan pendekatan berikut:

  • BC Math: Gunakan perpustakaan BC Math untuk aritmetik ketepatan arbitrari. Ia menyediakan fungsi yang direka khusus untuk pengiraan yang tepat.
  • GMP: Gunakan perpustakaan GMP untuk pengiraan berprestasi tinggi berasaskan integer. Walaupun ia tidak menyokong perpuluhan, penukaran kepada dan daripada integer kadangkala boleh mengekalkan ketepatan.

Petua Tambahan:

  • Elakkan membandingkan terapung untuk ketat kesamarataan. Sebaliknya, pilih ambang toleransi kecil yang menyumbang kepada kemungkinan ketidaktepatan.
  • Jika boleh, gunakan integer dan bukannya apungan untuk pengiraan yang melibatkan wang atau nilai lain yang memerlukan ketepatan.
  • Berhati-hati dengan pengehadan jenis data apungan dan sentiasa pertimbangkan keperluan ketepatan pengiraan anda.

Atas ialah kandungan terperinci Mengapa Pengiraan Terapung PHP Saya Menghasilkan \'ralat\' Daripada \'kejayaan\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!