is_nan() 函数用于判断一个浮点数是否为非数字(NAN,Not A Number)。NAN 通常表示未定义的或不可表示的数学运算结果,例如 acos(2) 或 sqrt(-1)。
== 或 === 检查 NAN,必须使用 is_nan()。如需判断是否为无穷大,请使用 is_infinite();如需判断是否为有限值,请使用 is_finite()。
is_nan(float $num): bool
| 参数 | 描述 |
|---|---|
num |
必需。要检查的浮点数。 |
如果 num 是 NAN,则返回 true,否则返回 false。
<?php
$nan = NAN;
$inf = INF;
$finite = 3.14;
var_dump(is_nan($nan)); // bool(true)
var_dump(is_nan($inf)); // bool(false) 无穷大不是NAN
var_dump(is_nan($finite)); // bool(false)
// NAN 不等于自身
var_dump($nan == $nan); // bool(false)
var_dump($nan === $nan); // bool(false)
?>
输出:
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
<?php
$operations = [
'acos(2)' => acos(2),
'asin(2)' => asin(2),
'sqrt(-1)' => sqrt(-1),
'log(-1)' => log(-1),
'0/0' => 0/0,
'INF - INF' => INF - INF
];
foreach ($operations as $desc => $result) {
echo "$desc: ";
if (is_nan($result)) {
echo "是 NAN";
} else {
echo "不是 NAN (值: $result)";
}
echo "<br>";
}
?>
输出:
acos(2): 是 NAN
asin(2): 是 NAN
sqrt(-1): 是 NAN
log(-1): 是 NAN
0/0: 是 NAN
INF - INF: 是 NAN
<?php
function safeAcos($x) {
$result = acos($x);
if (is_nan($result)) {
return "无效输入(超出 [-1, 1] 范围)";
}
return $result;
}
echo "acos(0.5) = " . safeAcos(0.5) . "<br>";
echo "acos(2) = " . safeAcos(2);
?>
输出:
acos(0.5) = 1.0471975511966
acos(2) = 无效输入(超出 [-1, 1] 范围)
is_nan() 只对浮点数有意义。如果传入非浮点数,PHP 会先将其转换为浮点数后再判断。$x == NAN 永远为 false,必须使用 is_nan($x) 来检查。