is_nan

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

is_nan检查浮点数是否为 NAN

描述

is_nan(float $num): bool

返回给定的 num 是否为 NAN (非数字).

NAN 是从未定义的数学运算返回的,例如当传递的参数超出函数的输入域时。平方根 (sqrt()) 仅为正数定义,传递负数将导致 NAN。其他返回 NAN 的运算示例包括将 INF 除以 INF 以及涉及现有 NAN 值的任何运算。

注意:

尽管名为 非数字NAN 仍然是 float 类型的有效值。

警告

NANNAN 不相等。要检查浮点数是否为 NAN,必须使用 is_nan()。检查 $float === NAN 将不起作用。

参数

num

要检查的 float

返回值

如果 numNAN,则返回 true,否则返回 false

示例

示例 #1 is_nan() 示例

<?php
$nan
= sqrt(-1);

var_dump($nan, is_nan($nan));
?>

以上示例将输出

float(NAN)
bool(true)

参见

添加注释

用户贡献的注释 7 notes

25
darkangel at moveinmod dot net
18 年前
nan/"非数字" 的作用不是用来查看数据类型是数字/文本/等等。

NaN 实际上是一组可以存储在浮点变量中的值,但实际上不能评估为适当的浮点数。

浮点系统有三个部分:1 位用于符号 (+/-),8 位指数和 23 位小数部分。
有一些规则规定了可以放置在每个部分中的值的组合,并且某些值保留用于诸如无穷大之类的数字。这导致某些组合无效,或者换句话说,不是数字。
14
10basetom
9 年前
如果您不能 100% 确定字符串将是什么数据类型,我会使用 is_numeric() 而不是 ctype_digit()。文档中的示例

<?php
$numeric_string
= '42';
$integer = 42;

ctype_digit($numeric_string); // true
ctype_digit($integer); // false (ASCII 42 是 * 字符)

is_numeric($numeric_string); // true
is_numeric($integer); // true
?>
2
ScorpioT1000
4 年前
function is_nan2($n) {
return $n !== $n;
}

is_nan2(NAN); // true
1
php at darkain dot com
8 年前
从 PHP 7 开始,字符串 'NaN' 也评估为 NaN 值。

示例
var_dump( (float) 'NaN' );

PHP 5.x 和 HHVM
float(0)

PHP 7.0
float(NAN)
-12
modern dot apocalypse at gmail dot com
12 年前
我决定做一些测试,因为我使用 is_nan 函数时得到了一些不寻常的结果,以下是我测试的结果

<?php
var_dump
(NAN); // float NAN

var_dump(NAN == NAN); // boolean true
var_dump(NAN === NAN); // boolean true
var_dump(is_nan(NAN)); // boolean true

var_dump(NAN == 12); // boolean true
var_dump(NAN === 12); // boolean false
var_dump(is_nan(12)); // boolean false

var_dump(NAN == 12.4); // boolean true
var_dump(NAN === 12.4); // boolean true
var_dump(is_nan(12.4)); // boolean false

var_dump(NAN == NULL); // boolean true
var_dump(NAN === NULL); // boolean false
var_dump(is_nan(NULL)); // boolean false

var_dump(NAN == 'K<WNPO'); // boolean true
var_dump(NAN === 'K<WNPO'); // boolean false
var_dump(is_nan('K<WNPO')); // null 并抛出警告 "Warning: is_nan() expects parameter 1 to be double, string given in NANTest.php on line 13"
-9
J.K.
15 年前
要查看某物是否是数字,请使用 ctype_digit()。
-10
php at keith tyler dot com
14 年前
对我来说这似乎很奇怪,但在布尔上下文中,NAN 评估为 true。

<?php
var_dump
(acos(8));
var_dump((bool)acos(8));
?>

返回

float(NAN)
bool(true)

顺便说一下,INF 和 -INF 也被评估为 true。
To Top