PHP中使用is_int函数的困难

时间:2016-01-01 22:32:55

标签: php loops

我正在编写一个代码来解决问题。我的一些功能无法正常工作。

function check_factor($sqr,$num)
{
    for($i = $sqr ; true ; $i++)
    {
        $n = pow($sqr,2) - $num;
        $s = sqrt($n);
        if(is_int($s))
        {
           return $i;
        }
    }

}

我知道$ s是一个“双”,但即使我将循环计数器限制为2,我也会得到一个无限循环。 我在这里错过了什么?为什么函数不会简单地返回null?为什么即使有2次迭代我也会得到无限循环?

2 个答案:

答案 0 :(得分:1)

根据手册:PHP函数sqrt()始终返回float而不是integer

检查http://php.net/manual/en/function.sqrt.php

答案 1 :(得分:1)

true使它成为无限循环

你总会得到一个无限循环因为 sqrt()返回浮动意味着



$s = sqrt($n);




$ s 现在是浮动

并且您的测试正在测试 $ s 整数,所以即使在 $ i = 2 循环之后它也将是一个无限循环每次循环都会卡住$ i = 2但是 如果您将代码更改为此



<?php
function check_factor($sqr,$num)
{ 
	echo "<br>";
    for($i = 1 ; $i < 3  ; $i++)
    {
		echo " in the loop $i<br>";
        $n = pow($sqr,2) - $num;
		echo "$n<br>";
        $s = sqrt($n);
		echo "$s<br>";
        if(is_int($s))
        {
			echo "in the if <br>";
           return $i;
        }
    }
	return 0;
}
$val=0;
$val = check_factor(5,2);
echo "<br>$val<br>";	
?>
&#13;
&#13;
&#13;

输出应该是这样的

&#13;
&#13;
in the loop 1
23
4.7958315233127
in the loop 2
23
4.7958315233127

0
&#13;
&#13;
&#13;

就是这样。我希望我帮忙。