Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,当数字作为参数传入时函数中断_Php - Fatal编程技术网

PHP,当数字作为参数传入时函数中断

PHP,当数字作为参数传入时函数中断,php,Php,如果我只使用第一个参数调用它,我有以下功能,它工作得很好: function max_months($vehicle_age,$max_peroid,$no_older) { $tot_age_in = $vehicle_age + 315360000; while ($tot_age_in > 536467742) { $tot_age_in = $tot_age_in - 31536000;

如果我只使用第一个参数调用它,我有以下功能,它工作得很好:

    function max_months($vehicle_age,$max_peroid,$no_older) {
            $tot_age_in = $vehicle_age + 315360000; 
            while ($tot_age_in > 536467742) {
                $tot_age_in = $tot_age_in - 31536000;
                if  ($tot_age_in < 536467742) {
                    $max_payback = floatval($tot_age_in - $vehicle_age);
                    $max_payback = seconds_to_month($max_payback);
                    break;
                }
            }
            return $max_payback;
        }
$vehicle\u age
设置为288897248


因此,在第一个实例中,我返回一个有效的数字,但是在第二个实例中,我返回false,即使这些数字是相同的。有人能解释一下为什么会这样吗?干杯

很可能您用完了
PHP\u INT\u MAX
值,您可以通过执行以下操作来检查最大整数值

echo PHP_INT_MAX;
如果变量大于
INT\u MAX
,则将其视为
浮点值。这意味着,您必须处理浮点不精确的问题。而不是检查,应该检查要检查的值周围的特定范围ε

通过如下更改代码,问题可能会得到解决:

       function max_months($vehicle_age,$max_peroid,$no_older) {
            $e = 0.0001;
            $tot_age_in = $vehicle_age + $max_peroid;   
            while ($tot_age_in > $no_older-$e) {
                $tot_age_in = $tot_age_in - $max_peroid;
                if  ($tot_age_in < $no_older+$e) {
                    $max_payback = floatval($tot_age_in - $vehicle_age);
                    $max_payback = seconds_to_month($max_payback);
                    break;
                }
            }
            return $max_payback;
        }
功能最长月份($vehicle\u age,$max\u peroid,$no\u older){
$e=0.0001;
$tot_age_in=$vehicle_age+$max_peroid;
而($tot_age_in>$no_older-$e){
$tot_age_in=$tot_age_in-$max_peroid;
如果($tot_age_in<$no_older+$e){
$max_payback=floatval($tot_age_in-$vehicle_age);
$max\u payback=从秒到月($max\u payback);
打破
}
}
返回$max_回报;
}
另见:



当您使用硬编码的数字时,您没有这个问题,因为它们被视为常量,因此您没有浮点问题。

$max\u payback并不总是初始化的。总是初始化返回值是一个好习惯。

谢谢,不幸的是,虽然尝试了您的代码,但这似乎不是问题。不,我只是遇到了同样的问题-返回值为false。我发誓,根据我的第一个代码示例,当这些值只是在函数中设置时,它就会工作。非常奇怪。在设置完$tot_age_后,您是否可以进行一些调试,
echo$tot_age_in
,看看它是否应该进入while循环。当然,我得到的是604257437是,这就是为什么您很可能得到一个False的原因,因为调用甚至没有进入while循环。问题仍然是为什么它没有进入while循环,
$vehicle\u age
@Liam的值是多少?您可以用return$max\u payback替换中断
echo PHP_INT_MAX;
       function max_months($vehicle_age,$max_peroid,$no_older) {
            $e = 0.0001;
            $tot_age_in = $vehicle_age + $max_peroid;   
            while ($tot_age_in > $no_older-$e) {
                $tot_age_in = $tot_age_in - $max_peroid;
                if  ($tot_age_in < $no_older+$e) {
                    $max_payback = floatval($tot_age_in - $vehicle_age);
                    $max_payback = seconds_to_month($max_payback);
                    break;
                }
            }
            return $max_payback;
        }