2010-08-11 111 views
7

我有这个检查为整数或浮点数值

$number = 0.5 

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

而且回声不浮动。 可能是什么原因 感谢

+0

您发布的代码对我来说工作正常(除非您在第一行之后忘了分号)。 – jhartz 2010-08-11 18:59:09

回答

37

大概$number实际上是一个字符串:"0.5"

请参阅is_numericis_*系列检查变量的实际类型。如果您只知道要知道变量是否为数字,无论它是实际上是intfloat还是string,请使用is_numeric

如果你需要有一个非零小数部分,你可以这样做:

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

如果它是一个字符串,那么我将如何区分一个整数和刺中的浮点数? 谢谢 – Autolycus 2010-08-11 18:42:52

+0

@user我已编辑回复以解决您的问题。 – Artefacto 2010-08-11 18:45:50

+0

如果你想检查浮点数,将其转换为int将无济于事。另外,你应该使用['intval'](http://ca.php.net/manual/en/function.intval.php)或['floatval'](http://ca.php.net/manual /en/function.floatval.php)将字符串转换为数字。 – 2010-08-11 18:58:14

1

如果你是刚刚检查的.(dot),那么你就不需要typecast但操作它作为一个字符串[strpos][1]()

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

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

如果字符串中有两个点,该怎么办? – OCDev 2014-10-05 02:41:09

+1

你仍然可以检查为一个字符串,就像'if(strpos($ number,'..')!== false)' – Noor 2014-10-07 12:48:38

+0

如果点不是彼此相邻,那该怎么办? – OCDev 2014-10-08 11:45:11

0

如果我理解正确,使用类型转换将允许您正确地检查int和float,而不管机器的语言环境如何。然而,我可能是错的......我不确定PHP是否支持小数语言环境,例如某些国家的逗号(,)。