0

次のコードで、$final が値を float として返すのはなぜですか?

計算値が 6 の場合は整数として返され、それ以外の場合は float として返されます。

どうやってやるの?

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

編集:私の質問が明確でない場合は申し訳ありません。$final に 10 進値があるかどうかを確認する必要があります。それを調べるためにis_float関数を使っていたのですが、上記の変数は常にfloatで値を返すため、常にtrueを返します。私の質問がもう少し明確になることを願っています。

4

4 に答える 4

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 />';

?>

さらに、OP コードでは、この行 ( 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)float を返します。int にキャストしないと、結果は float になります

于 2013-09-30T11:32:50.990 に答える