在下面的代码中,为什么$ final将值返回为float?
当计算值为6时,它应该返回整数,否则浮动。
我该怎么做?
$x = 62;
$round = 5 * round($x / 5);
$final = $round/10;
var_dump($final);
float(6)
编辑:对不起,如果我的问题不明确。我需要找出$ final是否有任何小数值。所以为了找出这个,我使用了is_float函数,但是总是返回true,因为上面的变量总是返回float中的值。希望我的问题更清楚一点。
答案 0 :(得分:2)
round
的返回类型为float,manual states。您需要将结果转换为整数:
$result = (integer) round($value);
更新
虽然我认为一个方法应该返回浮点数或整数而不是根据结果的值改变它,你可以尝试这样的事情:
if((integer) $result == $result) {
$result = (integer) $result;
}
return $result;
答案 1 :(得分:1)
现场查看此代码:
http://sandbox.onlinephpfunctions.com/code/f8f383604cf848ab63534da69295f8482528e4ce
-
<?php
$final = function($num) {
$calc = (5 * ($num / 5)) / 10;
if (intval($calc) == $calc) { settype($calc, "integer"); }
else { settype($calc, "float"); } // might not need that line
return $calc;
};
var_dump($final(62)); print '<br />';
var_dump($final(60)); print '<br />';
var_dump($final(59)); print '<br />';
?>
此外,在OPs代码中,此行(round()
)不正确:
$round = 5 * round($x / 5);
答案 2 :(得分:0)
有点长,但这样的事情应该可以解决问题
function ReturnType($FinalVal){
switch (gettype($FinalVal)){
case 'integer':
return (int) $FinalVal;
case 'double':
return (float) $FinalVal;
}
}
$x = 62;
$round = 5 * round($x / 5);
$final = $round/10;
$Value = ReturnType($final);
答案 3 :(得分:-1)
你必须像这样施展
$round = 5 * (int)(round($x / 5));
round($x / 5)
返回float。如果你不将它强制转换为int,那么结果将是float