6

这真的很奇怪。我有这段代码。

$rewardAmt = $amt;
if(is_float($rewardAmt)){
      print_r("is float");die;
} else {
      print_r("is not float"); die;
}

$amt 的值为 0.01。但它正在进入其他条件。所以我做了一个 $amt 的 var_dump。它说 string(4) 所以我决定输入 $amt

   $rewardAmt = (float)$amt;

但是这样做的问题是,即使 $amt 的值为 1,它仍然会被类型转换为浮动并进入 if 条件,这是不应该发生的。有没有其他方法可以做到这一点?谢谢

4

5 回答 5

13

filter_var()与_FILTER_VALIDATE_FLOAT

if (filter_var($amount, FILTER_VALIDATE_FLOAT))
{
     // good
}
于 2013-02-14T02:11:14.767 回答
5

如果将第一行更改为

$rewardAmt = $amt+0;

$rewardAmt 应该被转换为一个数字。

于 2013-02-14T02:17:43.410 回答
1

您可以使用一元运算+符,它将字符串转换为适当的类型(intfloat),然后使用以下命令测试生成的数据类型is_float

$s = "3.00";
$n = +$s;
var_dump( $n ); // float(3)
var_dump( is_float($n) ); // true


$s = "3";
$n = +$s;
var_dump( $n ); // int(3)
var_dump( is_float($n) ); // false
于 2017-09-25T13:48:54.640 回答
0

您可以通过以下方式检查

$float = floatval($num); //Convert the string to a float
if($float && intval($float) != $float) // Check if the converted int is same as the float value...
{
    // $num is a float
}else{
    // $num is an integer
}
于 2017-02-28T10:18:18.913 回答
0

正如is_float 函数文档中所建议的

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

答案是使用is_numeric()而不是 is_float()。如果测试的数字是“0”或 0,这也有效。

于 2022-01-07T14:55:17.903 回答