nan()会为字符串发出警告

我一直在使用is_nan()函数(即不是一个数字)来检查从查询字符串中获取的变量是否是数字。 但是,在变量是一个字符串的情况下(在这种情况下, is_nan()应该返回TRUE ),该函数也会引发以下相当恼人的警告:

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

由于is_nan()用于检查变量是否不是数字,为什么它会为字符串引发错误? 我会认为它应该接受非数字参数,因为这是种类 - 它的目的...

为什么会有这样的警告会被抛出? 有没有我在这里看不到的感觉?

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


该函数旨在检查数学函数和操作的返回值的有效性(请参阅NaN @ wikipedia),并且需要将浮点数作为参数。 从函数文档中取得的例子:

$nan = acos(8);
var_dump($nan, is_nan($nan));

# prints:
float(NAN)
bool(true)

你可能想要的是is_numeric()

if (!is_numeric($arbitraryType)) {

从这里开始

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

NaN实际上是一组可以存储在浮点变量中的值,但实际上并没有计算出适当的浮点数。

浮点系统有三个部分:1位为符号(+/-),8位指数和23位小数部分。 有规则可以规定哪些组合值可以放入每个部分,并且某些值保留用于无穷大等数字。 这导致某些组合无效,换句话说,不是一个数字。


看文档表明你对is_nan()理解是不正确的。 我认为你需要使用is_int()is_float() 。 或者,你可以使用一个表达式来转换你的变量。

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

链接地址: http://www.djcxy.com/p/26613.html

上一篇: nan() throws a warning for strings

下一篇: Best practices for exception management in Java or C#