Php _float是否未检测到浮点数

Php _float是否未检测到浮点数,php,forms,floating-point,floating-point-precision,Php,Forms,Floating Point,Floating Point Precision,我正在使用is_float()检查输入的数字是否为float,但当我输入3.00时,它会不断抛出echo()消息。还有其他解决办法吗?还是我做错了什么 这是我的密码: PHP: if(!is_float($_POST["gpa"])){ echo "GPA must be in #.## format."; } <input type="text" name="gpa" /> HTML: if(!is_float($_POST["gpa"])){ echo "GP

我正在使用
is_float()
检查输入的数字是否为float,但当我输入
3.00
时,它会不断抛出
echo()
消息。还有其他解决办法吗?还是我做错了什么

这是我的密码:

PHP:

if(!is_float($_POST["gpa"])){
    echo "GPA must be in #.## format.";
}
<input type="text" name="gpa" />
HTML:

if(!is_float($_POST["gpa"])){
    echo "GPA must be in #.## format.";
}
<input type="text" name="gpa" />

试试这个:

$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';
}

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

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


根据定义,您的
$\u POST[“gpa”]
是一个字符串,而不是浮点。当您执行var\u dump($\u POST[“gpa”])时可以看到这一点。

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

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

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

if(filter_var($_POST['gpa'], FILTER_VALIDATE_FLOAT) === false) {
    echo "GPA must be in #.## format.";
}
如果要验证格式,需要使用RegulaEx

([0-9]{1,})\.([0-9]{2,2})
您可以单独使用RegEx,而不必考虑
filter\u var()
,因为它也是这样做的

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

可能重复的作品对我来说很好!请向我们显示您的输入、当前输出和预期输出3.00 is my input@Rizier123输入始终是字符串或数组(如果指定),因此
is_float
将始终返回false,因此if条件为true。将
filter\u var()
filter\u VALIDATE\u FLOAT
一起使用。是否确实没有多余的字符,例如空格?请尝试
trim()
-在使用该值之前将其命名我是否必须使用reggae将条目限制为#.###格式?我是否必须使用reggae将条目限制为#.###格式?是的,如果确实需要,这是唯一的方法。或者你可以
round($n,2)
it来中继所有额外的数字。我必须使用雷鬼音乐将输入限制为#。#####格式?floatval出于某种原因对我不起作用,但它确实起作用:
if($num==(float)$num)(echo'is float')
-它不会过滤
int
thou(但如果使用相同的技巧和
(int)$num