Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Perbandingan Titik Terapung dalam PHP Kadang-kadang Gagal, dan Bagaimana Kita Boleh Membandingkannya dengan Betul?
Apabila membandingkan nombor titik terapung dalam PHP, adalah penting untuk mengendalikan perbezaan halus dalam perwakilan dan ketepatannya. Ini mungkin mencabar, seperti yang digambarkan oleh kod berikut:
<?php $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, anda mungkin menjangkakan syarat if adalah benar kerana $a dan $b mewakili nilai yang sama. Walau bagaimanapun, ia secara tidak disangka-sangka menilai palsu, menunjukkan bahawa $a dan $b adalah tidak sama.
Punca percanggahan ini terletak pada perwakilan dalaman nombor titik terapung dalam komputer. Nombor ini adalah anggaran, dan ketepatannya adalah terhad. Apabila melakukan pengiraan titik terapung, ralat pembundaran kecil boleh terkumpul, membawa kepada hasil yang tidak dijangka apabila membandingkannya untuk kesamarataan.
Untuk menangani isu ini, anda harus mengelak daripada membandingkan apungan menggunakan pengendali kesaksamaan yang ketat (==) melainkan anda benar-benar pasti mereka mewakili nilai yang sama. Sebaliknya, gunakan fungsi abs() dan bandingkan perbezaan mutlak antara kedua-dua nilai dengan toleransi kecil yang boleh diterima.
Sebagai contoh, anda boleh menggunakan kod berikut untuk membandingkan $a dan $b dengan toleransi 0.00001 :
if (abs(($a - $b) / $b) < 0.00001) { echo "a and b are same"; } else { echo "a and b are not same"; }
Kaedah ini menyediakan cara yang lebih dipercayai untuk membandingkan terapung untuk tujuan praktikal.
Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung dalam PHP Kadang-kadang Gagal, dan Bagaimana Kita Boleh Membandingkannya dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!