为什么is_numeric(NAN)返回TRUE ?


Why does is_numeric(NAN) return TRUE?

我已经测试了is_numeric函数在PHP中的NAN常数和给定的结果

is_numeric(NAN); // TRUE

但是NAN的意思是"不是一个数字"。为什么函数is_numeric返回true ?

我知道NAN是float类型。但是当测试下面两种情况时,结果是不同的:

is_float(NAN) // true
filter_var(NAN, FILTER_VALIDATE_FLOAT)// false

为什么会发生?

对不起,我的英语不好

NAN是一个特殊的常量。它必须保存一些值,所以它保存一个float 数据类型

var_dump(NAN); // float(NAN);

问题是filter_var没有比较数据类型,它在寻找数字,NAN不是。

某些数值操作可以产生由常量NAN表示的值。此结果表示浮点计算中未定义或不可表示的值。如果将该值与其他值(包括其本身)进行松散或严格的比较,结果将为FALSE。

因为NAN表示任意数量的不同值,所以NAN不应该与其他值进行比较,包括NAN本身,而应该使用is_nan()来检查。

NAN是一个非零浮点值。NAN是什么?它是(-1)的平方根。

现在是复数。(-1)的平方根是+i-i,这意味着NAN可以有两个值。因此,如果NAN求值为-ifalse,则NAN == false将变为true。