php - Saiz perbandingan data terapung terlalu besar
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-21 10:11:00
0
4
878
$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?

曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(4)
某草草

php BC pustaka fungsi ketepatan tinggi

if(bcsub($a,$b,1)==0){
    echo '相等';
}
扔个三星炸死你
$a = 12345678912345678.8;
$b = 12345678912345678.9;
$a = (string)$a;
$b = (string)$b;
if ($a == $b) {
    echo '相等';
}
仅有的幸福

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.

  1. Pertama dipisahkan oleh

  2. Dapatkan bilangan digit dalam bahagian integer, bandingkan panjang, dan kemudian bandingkan saiznya.

  3. 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
    $a = 12345678912345678.8;
    $b = 12345678912345678.9;
    if (strval($a) == strval($b)) {
        echo '相等';
    }
?>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan