Это действительно странно. У меня есть эта часть кода.
$rewardAmt = $amt; if(is_float($rewardAmt)){ print_r("is float");die; } else { print_r("is not float"); die; }
значение $ amt равно 0,01. Но он переходит в другое условие. Поэтому я сделал var_dump $ amt. он говорит строку (4) Так что я решил придумать $ amt
$rewardAmt = (float)$amt;
Но проблема с этим даже в том случае, если значение $ amt равно 1, оно все равно получает typecast для float и переходит в условие if, чего не должно быть. Есть ли другой способ сделать это? благодаря
Если вы измените первую строку на
$rewardAmt = $amt+0;
$ rewardAmt следует отнести к числу.
Используйте filter_var()
с FILTER_VALIDATE_FLOAT
if (filter_var($amount, FILTER_VALIDATE_FLOAT)) { // good }
Вы можете проверить это на
$float = floatval($num); //Convert the string to a float if($float && intval($float) != $float) // Check if the converted int is same as the float value... { // $num is a float }else{ // $num is an integer }
Вы можете использовать оператор unary +
, который передаст строку соответствующему типу ( int
или float
), а затем проверит полученный тип данных с помощью is_float
:
$s = "3.00"; $n = +$s; var_dump( $n ); // float(3) var_dump( is_float($n) ); // true $s = "3"; $n = +$s; var_dump( $n ); // int(3) var_dump( is_float($n) ); // false