문제
왜 출력이 있습니까? 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
}
다른 팁
아니요, 정수가 아닙니다. 플로트입니다.
바닥 함수를 사용하여 값의 정수 부분을 얻고 원래 값을 빼낼 수 있습니다. 차이가! = 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
}
물론 이것은 계산을 할 때 모듈로를 사용하는 것과 비교할 때 다소 이상한 방법입니다. 그러나 양식에서 게시 된 값을 테스트 할 때는 처음부터 문자열이므로 편리합니다. 경고는 부정적인 정수에 대해 거짓을 반환한다는 것입니다.
제휴하지 않습니다 StackOverflow