문제

왜 출력이 있습니까? sqrt PHP에서 "16"의 정수가 아니십니까?

예시

php > $fig = 16;
php > $sq = sqrt($fig); //should be 4
php > echo $sq;
4
php > echo is_int($sq);            // should give 1, but gives false
php > 

PHP가 파이썬과 유사하게 숨기는 내부 프레젠테이션에 문제가 있다고 생각합니다. 그런 다음 제곱근을 취한 후 주어진 그림이 정수인지 어떻게 알 수 있습니까?

그래서 당신은 어떻게 구별 할 수 있습니까? 4 그리고 4.12323 Regex를 사용하지 않고 PHP에서?

도움이 되었습니까?

해결책

PHP 매뉴얼에 따르면 float sqrt ( float $arg ), sqrt ()는 항상 플로트를 반환합니다. is_int () 함수를 사용하면 데이터 유형을 확인하고 실패를 반환하기 때문에 문제가 해결되지 않습니다.

이 문제를 해결하려면 대신 모듈러스를 사용하여 테스트 할 수 있습니다.

if (fmod(sqrt(16), 1) == 0) {
   // is an integer
}

PHP 5.2.0 이상을 사용하고 있다면 이것이 효과가 있다고 생각하지만 이러한 유형의 상황에서는 다음과 같이 사용하지 않았습니다.

$result = sqrt(16);
if (filter_var($result, FILTER_VALIDATE_INT)) {
    // is an integer
}

다른 팁

아니요, 정수가 아닙니다. 플로트입니다.

API에서 바로 말하면 리턴 유형은 플로트입니다.

http://us2.php.net/sqrt

 float sqrt  ( float $arg  )

Arg의 제곱근을 반환합니다.

바닥 함수를 사용하여 값의 정수 부분을 얻고 원래 값을 빼낼 수 있습니다. 차이가! = 0이면 정수가 아닙니다. 예를 들어

if (($sq - floor($sq)) == 0){
   YES
}else{
 NO
}

항상 플로트를 반환하기 때문에 :

float sqrt(float $arg)

원한다면 정수로 캐스팅 할 수 있습니다.

intval(sqrt(16));

편집, 확인 :

$sqrt = sqrt(16);

if (strpos($sqrt, '.') !== false)
{
    $sqrt = intval($sqrt);
}

else
{
    $sqrt = floatval($sqrt);
}

var_dump($sqrt);

정수를 확인하는 또 다른 방법 ctype_digit()

$result = sqrt(16);
if (ctype_digit((string)$result)) {
   // is an integer
}

물론 이것은 계산을 할 때 모듈로를 사용하는 것과 비교할 때 다소 이상한 방법입니다. 그러나 양식에서 게시 된 값을 테스트 할 때는 처음부터 문자열이므로 편리합니다. 경고는 부정적인 정수에 대해 거짓을 반환한다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top