まず、 IS_Double()関数の基本的な使用法を理解します。 IS_Double()は、変数が浮動数であるかどうかをチェックするPHPの関数です。実際、 is_double()はis_float()のエイリアスであり、2つの関数は同じです。
<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">"それは浮動小数点数です"</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">"不それは浮動小数点数です"</span></span><span>;
}
</span></span>
上記のコードでは、 $ varの値がフローティング番号の場合、 is_double()がtrueを返します。
IS_Double()関数は、変数が浮動数であるかどうかを実際に効果的に判断できますが、その判断基準はPHPタイプシステムに基づいて判断され、PHPタイプシステムは、浮動数のように見えるいくつかのケースを必ずしも正しく区別するとは限りません。
例えば:
<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">// フローティング番号</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">// フローティング番号</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">// 弦 "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">// 整数 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>
上記のコードに示すように、 IS_Double()関数は$ var1および$ var2をフローティング番号として正しく識別できますが、 「1.23」のような文字列を認識することはできません。 PHP自動タイプ変換の性質により、 $ var2 ( 1.0 )と$ var1 ( 1.23 )はどちらも浮動数と見なされますが、文字列「1.23」と数字1は浮動数として認識されません。
データクリーニングでは、通常、判断および処理する必要がある2種類のデータが発生します。
混合タイプデータ:たとえば、一部の列には、数値と文字列の両方の両方のデータが含まれています( 「123.45」または「0.0」など)。 is_double()のみを使用してこれらのデータを検出すると、誤判定または誤解される可能性があります。
精度の問題:フローティング数は、特に科学表記法を使用して非常に少ないまたは非常に大きな浮動数を表す場合、コンピューターに保存された場合、精度の損失を発生する場合があります。 is_double()は、このタイプの問題を解決できません。
データクリーニングの正確性を確保するには、より複雑な判断ロジックが必要になる場合があります。一般的な解決策は次のとおりです。
PHPによって提供されるFilter_Var()関数には、 filter_validate_floatオプションがあり、文字列をフローティング番号に変換できるかどうかをより厳密に決定できます。
<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> 是フローティング番号\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> 不是フローティング番号\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> 是フローティング番号\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> 不是フローティング番号\n";
}
</span></span>
出力:
<span><span>1.23 是フローティング番号
123abc 不是フローティング番号
</span></span>
filter_var()を使用すると、文字列からフローティング数値を効果的に抽出でき、他の違法な形式でデータを除外することもできます。is_double ()が文字列タイプを処理できない状況を回避できます。
フローティング数の形式をより厳密に制御したい場合は、正規表現と組み合わせて判断できます。たとえば、有効なフローティング数(負の数字、小数点などを含む)であるかどうかを検出します。
<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">"是フローティング番号"</span></span><span> : </span><span><span class="hljs-string">"不是フローティング番号"</span></span><span>; </span><span><span class="hljs-comment">// 是フローティング番号</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">"是フローティング番号"</span></span><span> : </span><span><span class="hljs-string">"不是フローティング番号"</span></span><span>; </span><span><span class="hljs-comment">// 是フローティング番号</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">"是フローティング番号"</span></span><span> : </span><span><span class="hljs-string">"不是フローティング番号"</span></span><span>; </span><span><span class="hljs-comment">// 不是フローティング番号</span></span><span>
</span></span>
正規表現を通じて、フローティング数の特定の形式を一致させることができ、認識の精度をさらに向上させることができます。
データクリーニングでは、 IS_Double()は実際に変数が浮動数であるかどうかを判断するのに役立ちますが、特に混合タイプのデータを処理する場合は、特定の制限があります。また、より正確な浮動数の判断を下すために、 filter_var()および正規表現を使用することもお勧めします。これらの方法は、特に一貫性のないデータ型と形式の場合、より柔軟性と精度を高めることができます。
したがって、特にフローティング数との文字列変換に関しては、データクリーニングがより高い精度を必要とする場合は、より強力なツールを使用してクリーニングを支援することを検討してください。