cari

Rumah  >  Soal Jawab  >  teks badan

php - Saiz perbandingan data terapung terlalu besar

$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?

曾经蜡笔没有小新曾经蜡笔没有小新2741 hari yang lalu880

membalas semua(4)saya akan balas

  • 某草草

    某草草2017-06-21 10:13:00

    php BC pustaka fungsi ketepatan tinggi

    if(bcsub($a,$b,1)==0){
        echo '相等';
    }

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-21 10:13:00

    $a = 12345678912345678.8;
    $b = 12345678912345678.9;
    $a = (string)$a;
    $b = (string)$b;
    if ($a == $b) {
        echo '相等';
    }

    balas
    0
  • 仅有的幸福

    仅有的幸福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.

    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.

    balas
    0
  • PHP中文网

    PHP中文网2017-06-21 10:13:00

    <?php
        $a = 12345678912345678.8;
        $b = 12345678912345678.9;
        if (strval($a) == strval($b)) {
            echo '相等';
        }
    ?>

    balas
    0
  • Batalbalas