Tout d'abord, comprenez l'utilisation de base de la fonction is_double () . is_double () est une fonction de PHP qui vérifie si une variable est un numéro flottant. En fait, is_double () est un alias pour is_float () , et les deux fonctions sont les mêmes.
<span><span><span class="hljs-variable">$var</span></span><span> = </span><span><span class="hljs-number">1.23</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$var</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"C'est un numéro de point flottant"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"不C'est un numéro de point flottant"</span></span><span>;
}
</span></span>
Dans le code ci-dessus, si la valeur de $ var est un numéro flottant, is_double () reviendra vrai , sinon faux .
La fonction is_double () peut en effet juger efficacement si une variable est un nombre flottant, mais ses critères de jugement sont jugés sur la base du système de type PHP, et le système de type PHP ne distingue pas toujours correctement certains cas qui semblent être un nombre flottant.
Par exemple:
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-number">1.23</span></span><span>; </span><span><span class="hljs-comment">// Numéro flottant</span></span><span>
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-number">1.0</span></span><span>; </span><span><span class="hljs-comment">// Numéro flottant</span></span><span>
</span><span><span class="hljs-variable">$var3</span></span><span> = </span><span><span class="hljs-string">"1.23"</span></span><span>; </span><span><span class="hljs-comment">// Chaîne "1.23"</span></span><span>
</span><span><span class="hljs-variable">$var4</span></span><span> = </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// Entier 1</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>)); </span><span><span class="hljs-comment">// true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$var3</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$var4</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>
Comme le montre le code ci-dessus, la fonction is_double () peut identifier correctement $ var1 et $ var2 comme des nombres flottants, mais il ne peut pas reconnaître des chaînes comme "1.23" . En raison de la nature de conversion de type automatique PHP, $ var2 ( 1.0 ) et $ var1 ( 1.23 ) sont tous deux considérés comme des nombres flottants, mais la chaîne "1.23" et le nombre 1 ne sont pas reconnus comme des nombres flottants.
Dans le nettoyage des données, nous rencontrons généralement deux types de données qui doivent être jugées et traitées:
Données de type mixte : par exemple, certaines colonnes contiennent des données qui ont à la fois des types numériques et de chaînes (tels que "123.45" ou "0.0" ). Si nous utilisons uniquement Is_double () pour détecter ces données, il peut être mal jugé ou mal jugé.
Problème de précision : les nombres flottants peuvent subir une perte de précision lorsqu'ils sont stockés dans des ordinateurs, en particulier lors de l'utilisation de la notation scientifique pour représenter des nombres flottants très petits ou très grands. is_double () ne peut pas résoudre ce type de problème.
Pour garantir la précision du nettoyage des données, nous pouvons avoir besoin d'une logique de jugement plus complexe. Voici quelques solutions courantes:
La fonction filter_var () fournie par PHP a l'option filter_validate_float , qui peut déterminer plus strictement si une chaîne peut être convertie en numéro flottant.
<span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-string">"1.23"</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-string">"123abc"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>, FILTER_VALIDATE_FLOAT) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$var1</span></span></span><span> 是Numéro flottant\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$var1</span></span></span><span> 不是Numéro flottant\n";
}
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>, FILTER_VALIDATE_FLOAT) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$var2</span></span></span><span> 是Numéro flottant\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$var2</span></span></span><span> 不是Numéro flottant\n";
}
</span></span>
Sortir:
<span><span>1.23 是Numéro flottant
123abc 不是Numéro flottant
</span></span>
L'utilisation de filter_var () peut extraire efficacement les nombres flottants des chaînes, et peut également exclure les données dans d'autres formats illégaux, en évitant la situation où is_double () ne peut pas gérer les types de chaînes.
Si nous voulons contrôler plus strictement le format des nombres flottants, nous pouvons le juger en combinaison avec des expressions régulières. Par exemple, détecter s'il s'agit d'un nombre flottant valide (y compris des nombres négatifs, des nombres décimaux, etc.).
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isValidFloat</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$var</span></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^-?\d+(\.\d+)?$/'</span></span><span>, </span><span><span class="hljs-variable">$var</span></span><span>);
}
</span><span><span class="hljs-variable">$var1</span></span><span> = </span><span><span class="hljs-string">"1.23"</span></span><span>;
</span><span><span class="hljs-variable">$var2</span></span><span> = </span><span><span class="hljs-string">"123"</span></span><span>;
</span><span><span class="hljs-variable">$var3</span></span><span> = </span><span><span class="hljs-string">"abc"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">isValidFloat</span></span><span>(</span><span><span class="hljs-variable">$var1</span></span><span>) ? </span><span><span class="hljs-string">"是Numéro flottant"</span></span><span> : </span><span><span class="hljs-string">"不是Numéro flottant"</span></span><span>; </span><span><span class="hljs-comment">// 是Numéro flottant</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">isValidFloat</span></span><span>(</span><span><span class="hljs-variable">$var2</span></span><span>) ? </span><span><span class="hljs-string">"是Numéro flottant"</span></span><span> : </span><span><span class="hljs-string">"不是Numéro flottant"</span></span><span>; </span><span><span class="hljs-comment">// 是Numéro flottant</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">isValidFloat</span></span><span>(</span><span><span class="hljs-variable">$var3</span></span><span>) ? </span><span><span class="hljs-string">"是Numéro flottant"</span></span><span> : </span><span><span class="hljs-string">"不是Numéro flottant"</span></span><span>; </span><span><span class="hljs-comment">// 不是Numéro flottant</span></span><span>
</span></span>
Grâce à des expressions régulières, nous pouvons correspondre au format spécifique des nombres flottants, améliorant davantage la précision de reconnaissance.
Dans le nettoyage des données, is_double () peut en effet nous aider à déterminer si une variable est un nombre flottant, mais il a certaines limites, en particulier lors du traitement des données de type mixte. Il est également recommandé d'utiliser Filter_Var () et des expressions régulières pour rendre des jugements de numéros flottants plus précis. Ces méthodes peuvent offrir une plus grande flexibilité et précision, en particulier dans le cas de types de données et de formats de données incohérentes, ce qui peut réduire efficacement une erreur de jugement ou une mauvaise notification.
Par conséquent, si votre nettoyage de données nécessite une précision plus élevée, surtout en ce qui concerne la conversion de cordes avec des nombres flottants, envisagez d'utiliser des outils plus puissants pour aider au nettoyage.