PHP函数is_nan()为字符串抛出警告

时间:2009-09-04 08:20:16

标签: php warnings suppress-warnings

我一直在使用is_nan()函数(即is-not-a-number)来检查从查询字符串中获取的变量是否为数字。但是,如果变量是一个字符串(在这种情况下is_nan()应该返回TRUE),该函数还会抛出以下相当烦人的警告:

Warning: is_nan() expects parameter 1 to be double, string given

由于is_nan()用于检查变量是否不是一个数字,为​​什么会为字符串抛出错误?我本以为它应该接受非数字参数,因为这是它的目的......

是否有理由抛出这样的警告?有什么感觉,我没有在这里看到?

注意:抛出错误时,函数仍然按预期运行 - 它对字符串返回TRUE,对数字返回FALSE。但是,我想知道为什么它会在字符串的情况下发出警告 我也开始使用is_int()因为我发现它更适合我的目的,所以我不寻找替代品。我只是对这种行为感到好奇。

7 个答案:

答案 0 :(得分:14)

该函数用于检查数学函数和运算的返回值的有效性(参见NaN@wikipedia)并期望将float作为参数。取自function's documentation

的示例
$nan = acos(8);
var_dump($nan, is_nan($nan));

# prints:
float(NAN)
bool(true)

您可能想要的是is_numeric()

if (!is_numeric($arbitraryType)) {

答案 1 :(得分:4)

<强> From here

  

nan /“不是数字”并不意味着看到   如果数据类型是   数字/文本/等。

     

NaN实际上是一组值   可以存储在浮点数   变量,但实际上并没有评估   到适当的浮点数。

     

浮点系统有三个   部分:1位用于符号(+/-),a   8位指数,23位   分数部分。有规则   管理哪些价值组合   可以放入每个部分,和   一些值保留给数字   如无限。这导致   某些组合无效,或   换句话说,不是数字。

答案 2 :(得分:2)

查看documentation表明您对is_nan()的理解不正确。我认为您需要使用is_int()is_float()。或者,您可以使用explict强制转换来转换变量。

is_nan()是一个数学函数,而is_int()是一个变量处理函数。

答案 3 :(得分:1)

因为在这种情况下它必须执行隐式转换。它应该警告你。我想知道隐式转换发生在哪里。它太容易出错。

答案 4 :(得分:1)

function is_number($a){
    return is_numeric($a) && !is_nan(floatval($a));
}

答案 5 :(得分:0)

检查: http://se2.php.net/manual/en/function.is-nan.php

“bool is_nan(float $ val)”&lt; - 这就是原因。

答案 6 :(得分:-2)

如果将is_nan()函数包装在条件中,例如:

,是否会出现错误?
if(is_nan('xxx')) {
echo   "Hey, that's no number!";
}
else {
...............
 }