nan/「非數值」並非用於判斷資料類型是數值、文字或其他類型。
NaN 實際上是一組可以儲存在浮點數變數中的值,但實際上並不會計算為一個正確的浮點數。
浮點數系統分為三個部分:1 個位元表示正負號 (+/-)、8 個位元表示指數,以及 23 個位元表示小數部分。
有一些規則規定哪些值的組合可以放在每個部分中,並且一些值被保留用於表示像無限大這樣的數字。這導致某些組合無效,或者換句話說,不是一個數字。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
is_nan — 檢查浮點數是否為 NAN
返回給定的 num
是否為 NAN
(「非數值」)。
未定義的數學運算會返回 NAN
,例如傳遞函式輸入域以外的參數時。平方根 (sqrt()) 僅針對正數定義,傳遞負數將導致 NAN
。其他返回 NAN
的運算範例包括將 INF
除以 INF
,以及任何涉及現有 NAN
值的運算。
注意:
範例 #1 is_nan() 函式範例
<?php
$nan = sqrt(-1);
var_dump($nan, is_nan($nan));
?>
以上範例會輸出:
float(NAN) bool(true)
nan/「非數值」並非用於判斷資料類型是數值、文字或其他類型。
NaN 實際上是一組可以儲存在浮點數變數中的值,但實際上並不會計算為一個正確的浮點數。
浮點數系統分為三個部分:1 個位元表示正負號 (+/-)、8 個位元表示指數,以及 23 個位元表示小數部分。
有一些規則規定哪些值的組合可以放在每個部分中,並且一些值被保留用於表示像無限大這樣的數字。這導致某些組合無效,或者換句話說,不是一個數字。
如果您無法 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
?>
從 PHP 7 開始,字串 'NaN' 也會被評估為 NaN 值。
範例
var_dump( (float) 'NaN' );
PHP 5.x 與 HHVM
float(0)
PHP 7.0
float(NAN)