在PHP中,NAN
将false与0
,"0"
,false
,array()
,array(1)
,NAN
进行比较, null
基本上我能辨别的所有其他类变量。
但NAN == true
会返回true
。为什么NAN == true
会返回true
?
答案 0 :(得分:9)
在php中,$x == true
与$x? true : false
相同。也就是说,将true
与==
进行比较而不是===
,则意味着$x
将在布尔上下文中评估为true。
如果在布尔上下文中将NAN
评估为false,则NAN == false
将评估为true。
答案 1 :(得分:6)
NAN(相当NAN或信令NAN)是非零浮点值。 *这就是为什么*
sqrt(-1.0) -> NAN
有-NAN和+ NAN虽然大约有80286,但它通常在测试中被认为是NAN。
如果需要,请检查FPU浮点指令集。
+ INF和-INF也是非零浮点值:
- log(0.0) -> +INF
log(0.0) -> -INF
这是英特尔浮点堆栈的转储。我只列出我正在谈论的几个值:(不要忘记,内部,FPU是10个字节):
<exp> <mantissa>
0.0 00 00 00 00 00 00 00 00 00 00
-INF FF FF 80 00 00 00 00 00 00 00
+INF 7F FF 80 00 00 00 00 00 00 00
-NAN FF FF C0 00 00 00 00 00 00 00
+NAN 7F FF C0 00 00 00 00 00 00 00
你可以看到,只有0.0是零!
答案 2 :(得分:3)
出于同样的原因is_numeric(NAN)
返回true
。
答案 3 :(得分:1)
我认为他们在更高版本的PHP中修复了它。 我使用5.2而NAN实际上等于false。
这是我的代码
<?php
var_dump(PHP_VERSION); //string(6) "5.2.17"
if(NAN == false)
{
echo "false";
}
if(NAN == true)
{
echo "true";
}
//This only print out "false".
?>
答案 4 :(得分:0)
==
运算符的含义是“类型杂耍后操作数相等”(与===
相对,这意味着“操作数相等且类型相同”)。你可以查找确切的(而且是任意的)规则in the manual,但是当其中一个操作数是数字时,类型juggling可以采用三种形式:
因此,在第2种情况下,结果在定义中为假,在3.中它是假的,因为NAN以任何方式与任何数值进行比较都是假的,并且在1.中NAN被转换为boolean,这是真的({{ 3}},但基本上除了零/空/空之外的任何东西都是真的),所以如果另一方也是真的那么比较将是真的。