Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Perbandingan Apungan Langsung Tidak Berfungsi dalam PHP, dan Bagaimana Kami Boleh Membandingkannya dengan Boleh Dipercayai?

Mengapa Perbandingan Apungan Langsung Tidak Berfungsi dalam PHP, dan Bagaimana Kami Boleh Membandingkannya dengan Boleh Dipercayai?

DDD
Lepaskan: 2025-01-03 14:27:40
asal
907 orang telah melayarinya

Why Doesn't Direct Float Comparison Work in PHP, and How Can We Compare Them Reliably?

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';
}
Salin selepas log masuk

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";
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan