현재 위치: > 최신 기사 목록> 왜 _double (1)이 거짓을 반환하는 이유는 무엇입니까? 유형 확인을 이해합니다

왜 _double (1)이 거짓을 반환하는 이유는 무엇입니까? 유형 확인을 이해합니다

gitbox 2025-05-27

PHP 유형 시스템 소개

이 동작을 이해하려면 먼저 PHP 유형 시스템을 이해해야합니다. PHP는 대부분의 경우 자동으로 변환하는 약하게 입력 한 언어입니다. 그러나 PHP는 여전히 내부적으로 명확한 데이터 유형을 유지합니다.

  • 정수

  • 플로트 유형 (더블/플로트)

  • 부울

  • 정렬

  • 물체

  • 의지

이것은 1과 1.0이 수치 적으로 동일하더라도 여전히 유형이 다르다는 것을 의미합니다.


IS_Double은 어떻게 작동합니까?

is_double ()은 변수가 부동 소수점 유형인지 여부를 감지하는 PHP의 내장 기능입니다. 구현 로직은 실제로 매우 간단합니다. 이는 메모리 변수의 유형 식별자가 "부동 소수점"인지 확인하는 것과 같습니다.

예를 살펴 보겠습니다.

 $a = 1;
$b = 1.0;

var_dump(is_double($a)); // bool(false)
var_dump(is_double($b)); // bool(true)

위의 코드에서 변수 $ a는 정수이며, PHP의 "정수"로 엄격하게 식별되고 $ B는 부동 소수점 번호이며 True를 반환합니다.

이것은 기사 제목의 문제를 설명합니다. is_double (1)은 문자 1이 부동 소수점 유형이 아닌 정수이기 때문에 False를 반환합니다.


is_double ( '1.0') 반환은 무엇입니까?

부동 소수점 번호처럼 보이는 문자열을 통과 할 때 is_double ()가 어떻게 행동 할 것인지 궁금 할 수도 있습니다.

 var_dump(is_double('1.0')); // bool(false)

이 결과는 is_double ()가 암시 적 유형 변환을 수행하지 않는다는 것을 다시 보여줍니다. 문자열 '1.0' 은 자동으로 부동 소수점 번호로 해석되지 않습니다. IS_DOUBLE ()은 변수의 내부 유형이 이미 플로트 인 경우에만 true를 반환합니다.


유형 변환을 수행하는 올바른 방법

IS_DOUBLE () 에 의존하는 것이 아니라 값을 플로팅 포인트 번호로 해석 할 수 있는지 여부를 결정하는 것이 목적이라면 명시 적으로 변환을 입력하거나 정규 표현식 검증을 사용해야합니다. 예를 들어:

 function is_numeric_float($value) {
    return is_numeric($value) && (strpos((string)$value, '.') !== false);
}

var_dump(is_numeric_float('1.0')); // bool(true)

또는보다 유연한 검증을 위해 Filter_var ()를 사용할 수 있습니다.

 var_dump(filter_var('1.0', FILTER_VALIDATE_FLOAT)); // float(1)

이 유형의 메소드는 특히 사용자 입력 또는 네트워크 요청에서 데이터를 처리 할 때 단순히 IS_Double () 에 의존하는 것보다 실제 개발에서 더 신뢰할 수 있습니다.


실제 응용 프로그램의 함정

일부 데이터 확인 시나리오에서 개발자는 IS_Double () 이 "부동 소수점 번호처럼 보이는 모든 값"을 판단 할 수 있다고 잘못 가정 할 수 있습니다. 예를 들어, 프론트 엔드에서 JSON 요청을 받으면 필드 값은 "1.0" 입니다. IS_DOUBLE ()을 사용하여 직접 확인하면 데이터 형식이 잘못된 것으로 잘못 판단됩니다.

올바른 방법은 is_numeric ()을 형식 확인과 결합하거나 JSON을 구문 분석 할 때 필드 유형을 수동으로 변환하는 것입니다.

 $data = json_decode(file_get_contents('https://gitbox.net/data.json'), true);
$price = (float)$data['price'];
if (is_double($price)) {
    // 부동 소수점 번호의 안전한 사용
}