Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

checking if a number is float in PHP

This is really weird. I have this piece of code.

$rewardAmt = $amt;
if(is_float($rewardAmt)){
      print_r("is float");die;
} else {
      print_r("is not float"); die;
}

value of $amt is 0.01. But it is going into else condition. So I did a var_dump of $amt. it says string(4) So I decided to typecast $amt

   $rewardAmt = (float)$amt;

But the problem with this is even if the value of $amt is 1, it still gets typecast to float and goes into if condition, which shouldn't happen. Is there any other way to do this ? Thanks

like image 644
rkt Avatar asked Feb 14 '13 02:02

rkt


4 Answers

Use filter_var() with FILTER_VALIDATE_FLOAT

if (filter_var($amount, FILTER_VALIDATE_FLOAT))
{
     // good
}
like image 63
John Conde Avatar answered Nov 17 '22 23:11

John Conde


If you change the first line to

$rewardAmt = $amt+0;

$rewardAmt should be cast to a number.

like image 34
PhoenixWing156 Avatar answered Nov 17 '22 23:11

PhoenixWing156


You can use the unary + operator, which will cast the string to the appropriate type (int or float), and then test the resulting data type with 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
like image 1
trincot Avatar answered Nov 17 '22 22:11

trincot


You can check this by

$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
}
like image 1
akgola Avatar answered Nov 18 '22 00:11

akgola