2010-08-11 12 views
7

tengo estecheque por entero o flotador valores

$number = 0.5 

if (is_float($number)) 
{ 
    echo 'float'; 
} 
else 
{ 
    echo 'not float'; 
} 

y no échos flotar. lo que podría ser la razón gracias

+0

El código que ha publicado funciona bien para mí (excepto que olvidó un punto y coma después de la primera línea). – jhartz

Respuesta

37

Probablemente $number es en realidad una cadena: "0.5".

Ver is_numeric en su lugar. La familia is_* comprueba el tipo real de la variable. Si solo desea saber si la variable es un número, independientemente de si es realmente int, float o string, use is_numeric.

Si se necesita tener una parte decimal distinto de cero, puede hacerlo:

//if we already know $number is numeric... 
if ((int) $number == $number) { 
    //is an integer 
} 
+0

si es una cadena, ¿cómo podría distinguir entre un entero y el punto de flotación en la picadura? gracias – Autolycus

+0

@user He editado la respuesta para abordar sus inquietudes. – Artefacto

+0

Convertirlo a un int no ayudaría si desea buscar carrozas. Además, debe usar ['intval'] (http://ca.php.net/manual/en/function.intval.php) o [' floatval'] (http://ca.php.net/manual /en/function.floatval.php) para convertir una cadena en un número. –

1

Si usted está mirando sólo por el .(dot) entonces no es necesario typecast pero manipularla como una cadena con [strpos][1]().

if (strpos($number,'.') !== false) { 

    echo 'true'; 
}else { 
    echo 'false'; 
} 
+0

¿Qué pasa si hay dos puntos en la cadena? – OCDev

+1

Aún puede marcar como una cadena, como 'if (strpos ($ number, '..')! == false)' – Noor

+0

¿Qué pasa si los puntos no están uno al lado del otro? – OCDev

0

Si entiendo correctamente, usar el tipo de transmisión le permitirá comprobar int y flotar correctamente independientemente de la configuración regional de la máquina. Sin embargo, podría estar muy equivocado ... No estoy seguro si PHP admite configuraciones locales decimales, como la coma (,) para ciertos países.

Cuestiones relacionadas