Position actuelle: Accueil> Derniers articles> Comment résoudre le problème de l'IS_NAN en PHP pour déterminer l'infini et le nan

Comment résoudre le problème de l'IS_NAN en PHP pour déterminer l'infini et le nan

gitbox 2025-05-28

Dans PHP, la fonction IS_NAN est utilisée pour détecter si une variable est "nan" (pas un nombre). Bien que cette fonction puisse juger efficacement la plupart des exceptions non numériques, elle confond les développeurs lorsqu'il s'agit de valeurs numériques spéciales, comme l'infini .

Que sont Nan et Infinity?

  • NAN (pas un nombre) : indique une valeur spéciale qui n'est pas un nombre. Il se produit généralement lorsque le résultat de calcul ne peut pas être défini comme une valeur numérique, telle que 0/0 ou un nombre de racines carrées négatives.

  • Infinity : indique une très grande valeur qui se produit généralement lorsqu'elle dépasse la valeur flottante maximale prise en charge par PHP. Par exemple, lors du calcul de 1/0, vous obtiendrez Inf (positif infini) ou -inf (négatif infini).

Pourquoi_nan ne peut pas juger correctement l'infini?

En PHP, la fonction IS_NAN détermine seulement si une valeur est NAN , et elle ne déterminera pas si elle est infinie . Par exemple:

 var_dump(is_nan(NAN)); // bool(true)
var_dump(is_nan(INF)); // bool(false)
var_dump(is_nan(-INF)); // bool(false)

Comme vous pouvez le voir, IS_NAN renvoie True uniquement lorsque la valeur est NAN , d'autres tels que inf ou -inf return false , ce qui peut confondre les développeurs car Inf et Nan représentent l'état numérique de l'exception.

Comment résoudre ce problème?

Afin de gérer le jugement de l'infini et du NAN , nous pouvons résoudre ce problème en combinant d'autres fonctions. Il existe une fonction IS_infinite dans PHP qui peut être utilisée pour déterminer si une valeur est infinie (positive ou négative infinie), tandis que l'IS_NAN est utilisé pour déterminer s'il est "nan".

Solution:

 <?php

function is_nan_or_infinite($value) {
    if (is_nan($value)) {
        return 'NaN';
    } elseif (is_infinite($value)) {
        return 'Infinity';
    } else {
        return 'Neither NaN nor Infinity';
    }
}

echo is_nan_or_infinite(NAN); // Sortir NaN
echo is_nan_or_infinite(INF); // Sortir Infinity
echo is_nan_or_infinite(-INF); // Sortir Infinity
echo is_nan_or_infinite(123); // Sortir Neither NaN nor Infinity

?>

Cette fonction personnalisée est_nan_or_infinite juge deux valeurs spéciales NAN et Infinity . En utilisant d'abord IS_NAN , puis en utilisant IS_INFINITE pour juger, les deux peuvent être distingués avec précision.

Choses à noter dans une application pratique

  • NAN se produit généralement lorsque les erreurs de calcul mathématique, des opérations telles que 0/0 ou SQRT (-1) renverront NAN . Par conséquent, si vous rencontrez ces valeurs aberrantes dans le traitement des données, vous devez les traiter à temps pour éviter d'affecter les résultats.

  • L'infini survient généralement lorsque le débordement mathématique, comme 1/0 ou de très grands calculs numériques renvoie Inf ou -inf . Dans les applications, l'infini peut affecter le flux normal des données, il doit donc être géré raisonnablement en fonction des besoins de l'entreprise.