Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Perbandingan Titik Terapung dalam PHP Kadang-kadang Gagal, dan Bagaimana Kita Boleh Membandingkannya dengan Betul?

Mengapa Perbandingan Titik Terapung dalam PHP Kadang-kadang Gagal, dan Bagaimana Kita Boleh Membandingkannya dengan Betul?

DDD
DDDasal
2024-12-23 16:56:11765semak imbas

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

Membandingkan Nombor Titik Terapung dalam PHP

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.

Mengapa Perbandingan Gagal

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.

Mengendalikan Perbandingan Terapung

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!

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