Rumah > Soal Jawab > teks badan
$a = 12345678912345678.8;
$b = 12345678912345678.9;
Dengan dua nombor yang berbeza ini, jika($a == $b){echo 'equal';} output hasil adalah 'equal' saya tahu ia terlalu besar dan melebihi julatnya Hasil daripada output $a sahaja : 1.2345678912346E +16 perenambelasan, apakah cara terbaik untuk membandingkan data besar tersebut?
某草草2017-06-21 10:13:00
php BC pustaka fungsi ketepatan tinggi
if(bcsub($a,$b,1)==0){
echo '相等';
}
扔个三星炸死你2017-06-21 10:13:00
$a = 12345678912345678.8;
$b = 12345678912345678.9;
$a = (string)$a;
$b = (string)$b;
if ($a == $b) {
echo '相等';
}
仅有的幸福2017-06-21 10:13:00
Selepas menguji pada komputer saya sendiri, apabila panjangnya melebihi 14 aksara, PHP akan gagal. Sistem yang berbeza dan versi PHP yang berbeza akan mempunyai panjang yang berbeza.
Manual rasmi maklumat berkaitan
Kaedah 1:
$a = '12345678912345678.6';
$b = '12345678912345678.9';
if($a == $b) {
echo 1;
}
Kaedah 2:
Hanya idea berikut disediakan di sini
Kalau nak bandingkan terus melalui floating point pun tak boleh.
Pertama dipisahkan oleh
Dapatkan bilangan digit dalam bahagian integer, bandingkan panjang, dan kemudian bandingkan saiznya.
Jika bahagian integer adalah sama, kemudian bandingkan bahagian perpuluhan.
Petua: Memandangkan nombor itu tidak terhingga, anda juga harus memberi perhatian kepada panjang nombor selepas pemisahan.
PHP中文网2017-06-21 10:13:00
<?php
$a = 12345678912345678.8;
$b = 12345678912345678.9;
if (strval($a) == strval($b)) {
echo '相等';
}
?>