Mengendalikan Perbandingan Terapung dalam PHP
Perbandingan apungan dalam PHP boleh membawa kepada hasil yang tidak dijangka disebabkan oleh pengehadan aritmetik titik terapung.
Masalah Contoh
Pertimbangkan coretan kod berikut:
$a = 0.17; $b = 1 - 0.83; // 0.17 if ($a == $b) { echo 'a and b are same'; } else { echo 'a and b are not same'; }
Dalam kod ini, $a dan $b mewakili nilai berangka yang sama (0.17), tetapi perbandingan menggunakan == mengembalikan hasil daripada keadaan lain.
Penyelesaian
Membandingkan terapung untuk kesaksamaan menggunakan perbandingan ketat (==) tidak boleh dipercayai kerana ketepatan titik terapung. Untuk menangani isu ini, pertimbangkan untuk menggunakan ambang perbezaan yang boleh diterima untuk perbandingan. Contohnya:
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; }
Dalam kod ini, fungsi abs() mengambil perbezaan mutlak antara $a dan $b, kemudian membahagikan hasilnya dengan $b. Perbandingan dilakukan terhadap ambang kecil untuk mengambil kira ketepatan titik terapung.
Kaveat
Walaupun pendekatan ini menyediakan penyelesaian yang munasabah untuk perbandingan kesamaan terapung, ia adalah penting untuk diingat bahawa nilai titik terapung sememangnya tidak tepat dan kesamaan yang tepat mungkin tidak selalu diwakili dengan tepat.
Atas ialah kandungan terperinci Mengapa Perbandingan Apungan Langsung Tidak Berfungsi dalam PHP, dan Bagaimana Kami Boleh Membandingkannya dengan Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!