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
Lepaskan: 2024-12-23 16:56:11
asal
791 orang telah melayarinya

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

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

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!

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