2016-11-11 114 views
6

我已经测试is_numeric函数在PHP中NAN常数和给定的结果为什么is_numeric(NAN)返回TRUE?

is_numeric(NAN); // TRUE 

但NAN表示“不是一个数字”。为什么功能is_numeric返回true

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

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

为什么会发生这种情况?

对不起,我的英语不好

回答

3

NAN是一个特殊的常量。它必须保持一定的价值,所以它拥有float数据类型

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

的问题是,filter_var没有比较的数据类型,它是寻找数字,这NANis not

某些数值运算可能会导致由常数NAN表示的值。此结果表示浮点计算中未定义或不可表示的值。对任何其他值(包括其本身)进行任何宽松或严格的比较都将导致FALSE。因为NAN表示任意数量的不同值,所以NAN不应与包括其自身在内的其他值进行比较,而应该使用is_nan()进行检查。

1

NAN是一个非零浮点值。什么是NAN,其平方根为(-1)

所以现在说到复数。 (-1)的平方根是+i-i这意味着NAN可以具有两个值。因此,如果NAN要评估为-ifalse,则NAN == false会变为true。