suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php – Float-Datenvergleichsgröße zu groß

$a = 12345678912345678.8;
$b = 12345678912345678.9;

Bei diesen beiden unterschiedlichen Zahlen ist if($a == $b){echo 'equal';} die Ergebnisausgabe „gleich“, und ich weiß, dass sie zu groß ist und den Bereich überschreitet : 1.2345678912346E +16 hexadezimal, was ist der beste Weg, so große Datenmengen zu vergleichen?

曾经蜡笔没有小新曾经蜡笔没有小新2791 Tage vor914

Antworte allen(4)Ich werde antworten

  • 某草草

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

    php BC高精确度函数库

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

    Antwort
    0
  • 扔个三星炸死你

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

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

    Antwort
    0
  • 仅有的幸福

    仅有的幸福2017-06-21 10:13:00

    经过自己电脑上测试当长度超过14位时, PHP就会益出。 不一样的系统 不一样的PHP版本长度益出会不一样。

    相关资料 官方手册

    方法1:

    $a = '12345678912345678.6';
    $b = '12345678912345678.9';
    if($a == $b) {
        echo 1;
    }

    方法2:
    这里只提供下思路

    如果想要直接通过浮点来比较没有找到方法。

    1. 先将以.分隔

    2. 获取整数部分位数,比较长度,再比较大小。

    3. 诺整数部分相等再比较小数部分。

    Tip:考虑到数的无限大,也要注意分隔之后的数长度的益出,若益出再进行分隔。

    Antwort
    0
  • PHP中文网

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

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

    Antwort
    0
  • StornierenAntwort