is_float没有检测到浮点数

时间:2015-02-02 20:19:13

标签: php forms floating-point floating-point-precision

我正在使用is_float()检查输入的号码是否为浮点数,但是当我输入echo()时,它会不断抛出3.00消息。还有其他解决方案吗?或者我做错了什么?

这是我的代码:

PHP:

if(!is_float($_POST["gpa"])){
    echo "GPA must be in #.## format.";
}

HTML:

<input type="text" name="gpa" />

4 个答案:

答案 0 :(得分:5)

表单输入始终是字符串,因此if条件将始终返回您指定的错误消息。请改用filter_var()

if(filter_var($_POST['gpa'], FILTER_VALIDATE_FLOAT) === false) {
    echo "GPA must be in #.## format.";
}

如果您要验证格式,则需要使用注册 ular Ex 加注。

([0-9]{1,})\.([0-9]{2,2})

您可以单独使用RegEx并忘记filter_var(),因为它也是如此。

if(preg_match('/([0-9]{1,})\.([0-9]{2,2})/', $_POST['gpa']) == 0) {
    echo "GPA must be in #.## format.";
}

答案 1 :(得分:3)

试试这个:

$num = 2.6;

if($num === floatval($num)){
    echo 'is float';
}else{
    echo 'is not';
}

其他方式是正则表达式:

$num = '345.56678';//post is string

$patt = '/^\d+\.{1}\d+$/';
$resp = preg_match($patt,$num);
if($resp){
    echo 'is float';
}else{
    echo 'is not';
}

答案 2 :(得分:2)

来自documentation

  

查找给定变量的类型是否为float。

     

要测试变量是数字还是数字字符串(例如表单输入,始终是字符串),必须使用is_numeric()。

根据定义,您的$_POST["gpa"]是一个字符串,而不是一个浮点数。执行var_dump($_POST["gpa"])

时,您可以看到此信息

答案 3 :(得分:2)

验证字符串中浮点值的正确方法是:

if( !filter_var($_POST["gpa"], FILTER_VALIDATE_FLOAT) ) echo 'error!';