Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pengiraan Terapung PHP Saya Menghasilkan \"ralat\" Daripada \"kejayaan\"?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-30 16:44:03600semak imbas

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>

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!

Kenyataan:
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