首页 文章

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

提问于
浏览
4

我一直在使用 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 回答

  • 1

    该函数用于检查数学函数和运算的返回值的有效性(参见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

    From here

    nan /“not a number”并不意味着要查看数据类型是否为数字/文本/等.NaN实际上是一组可以存储在浮点变量中的值,但实际上并没有评估为正确的浮点数点数 . 浮点系统有三个部分:1位用于符号(/ - ),8位指数和23位小数部分 . 有一些规则可以控制哪些值组合可以放入每个部分,并且某些值保留用于诸如无穷大之类的数字 . 这导致某些组合无效,或者换句话说,不是数字 .

  • 4

    看一下documentation表明您对 is_nan() 的理解不正确 . 我想你需要使用 is_int()is_float() . 或者,您可以使用explict强制转换来转换您的变量 .

    is_nan() 是数学函数,而 is_int() 是变量处理函数 .

  • 0

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

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

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

    “bool is_nan(float $ val)”< - 这就是原因 .

  • -2

    如果将is_nan()函数包装在条件中,是否会出现错误,例如:

    if(is_nan('xxx')) {
    echo   "Hey, that's no number!";
    }
    else {
    ...............
     }
    

相关问题