php - Taille de comparaison des données flottantes trop grande
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-21 10:11:00
0
4
877
$a = 12345678912345678.8;
$b = 12345678912345678.9;

Avec ces deux nombres différents, if($a == $b){echo 'equal';} le résultat est 'equal', je sais qu'il est trop grand et dépasse sa plage. Le résultat de la sortie de $a seul est. : 1.2345678912346E +16 hexadécimal, quelle est la meilleure façon de comparer des données aussi volumineuses ?

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

répondre à tous(4)
某草草

Bibliothèque de fonctions de haute précision php BC

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

Après avoir testé sur mon propre ordinateur, lorsque la longueur dépasse 14 caractères, PHP échouera. Différents systèmes et différentes versions de PHP auront des longueurs différentes.

Manuel officiel d'informations connexes

Méthode 1 :

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

Méthode 2 :
Seules les idées suivantes sont fournies ici

Si vous souhaitez comparer directement via des virgules flottantes, il n'y a aucun moyen.

  1. Premier séparé par

  2. Obtenez le nombre de chiffres dans la partie entière, comparez la longueur, puis comparez la taille.

  3. Si les parties entières sont égales, comparez les parties décimales.

Conseil : étant donné que le nombre est infini, vous devez également faire attention à la longueur du nombre après la séparation. S'il est plus long, séparez-le à nouveau.

洪涛
<?php
    $a = 12345678912345678.8;
    $b = 12345678912345678.9;
    if (strval($a) == strval($b)) {
        echo '相等';
    }
?>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal