먼저 IS_DOUBLE () 함수의 기본 사용법을 이해하십시오. is_double ()은 변수가 떠 다니는 숫자인지 확인하는 PHP의 함수입니다. 실제로 IS_DOUBLE () 은 is_float () 의 별칭이며 두 함수는 동일합니다.
<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은 부유 숫자로 인식되지 않습니다.
데이터 청소에서 일반적으로 판단 및 처리 해야하는 두 가지 유형의 데이터가 발생합니다.
혼합 유형 데이터 : 예를 들어 일부 열에는 숫자 및 문자열 유형이 모두있는 데이터 (예 : "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 () 와 정규식을 사용하여보다 정확한 부동 수단 판단을하는 것이 좋습니다. 이러한 방법은 특히 일관되지 않은 데이터 유형 및 형식의 경우 유연성과 정확성을 높일 수 있으며, 이는 잘못 판단 또는 오해를 효과적으로 줄일 수 있습니다.
따라서 데이터 청소에 특히 플로팅 숫자로 문자열 변환과 관련하여 정확도가 높은 경우 더 강력한 도구를 사용하여 청소를 도와주십시오.