0

在下面的代码中,为什么 $final 返回值是浮点数?

当计算值为 6 时,应返回整数,否则返回浮点数

我怎样才能做到这一点?

$x = 62;
$round = 5 * round($x / 5);
$final = $round/10;     
var_dump($final); 
float(6) 

编辑:对不起,如果我的问题不清楚。我需要找出 $final 是否有任何十进制值。因此,为了找出这一点,我使用了 is_float 函数,但它总是返回 true,因为上面的变量总是返回 float 中的值。希望我的问题更清楚一点。

4

4 回答 4

2

的返回类型round是浮点数,如手册所述。您需要将结果转换为整数:

$result = (integer) round($value);

更新:

虽然我认为一个方法应该返回浮点数或整数,而不是根据结果的值来改变它,你可以尝试这样的事情:

if((integer) $result == $result) {
    $result = (integer) $result;
}
return $result;
于 2013-09-30T11:31:09.387 回答
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);
于 2013-09-30T11:45:38.150 回答
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);
于 2013-09-30T11:46:41.863 回答
-1

你必须像这样铸造

$round = 5 * (int)(round($x / 5));

round($x / 5)返回浮动。如果您不将其转换为 int 则结果将是 float

于 2013-09-30T11:32:50.990 回答