我一直在使用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()
因为我发现它更适合我的目的,所以我不寻找替代品。我只是对这种行为感到好奇。
答案 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 {
...............
}