Проверка, является ли строка двойной или нет

Я пытаюсь проверить php, если строка является двойной или нет.

Вот мой код:

if(floatval($num)){ $this->print_half_star(); } 

$ num – это строка. Проблема в том, что даже когда есть int, она дает true. Есть ли способ проверить, является ли это float, а не int !?

 // Try to convert the string to a float $floatVal = floatval($num); // If the parsing succeeded and the value is not equivalent to an int if($floatVal && intval($floatVal) != $floatVal) { // $num is a float } 

Это опустит целочисленные значения, представленные в виде строк:

 if(is_numeric($num) && strpos($num, ".") !== false) { $this->print_half_star(); } 

Вы можете попробовать следующее:

 function isfloat($num) { return is_float($num) || is_numeric($num) && ((float) $num != (int) $num); } var_dump(isfloat(10)); // bool(false) var_dump(isfloat(10.5)); // bool(true) var_dump(isfloat("10")); // bool(false) var_dump(isfloat("10.5")); // bool(true) 

Почему бы не использовать магию регулярного выражения

 <?php $p = '/^[0-9]*\.[0-9]+$/'; $v = '89.00'; var_dump(preg_match($p, $v)); $v = '.01'; var_dump(preg_match($p, $v)); $v = '0.01'; var_dump(preg_match($p, $v)); $v = '89'; var_dump(preg_match($p, $v)); 

если «двойной формат строки», как этот «XXXXXX.XXXXXX»,

попробуйте проверить

 function check_double_string($str){ $pairs = explode('.',$str); if ( is_array($pairs) && count($pairs)==2) { return ( is_numeric($pairs[0]) && is_numeric($pairs[1])? true : false; } return false; } 

Чтобы получить все случаи поплавка, нам нужно добавить конец нуля в конец, который может быть отрублено floatval() или методом typecasting (float)$num

 $num='17.000010'; $num_float = (float)$num; //$num_float is now 17.00001 //add the zero's back to $num_float while (strlen ($num) > strlen ($num_float)) $num_float = $num_float . '0'; //$spot_float in now a string again if($num_float != $num) then $num was no double :; 

note !== не использовался только в случае, если $num_float никогда не преобразовывался обратно в строку, добавляя нули. это будет иметь место для значений, которые не заканчиваются на 0.