2016-11-11 110 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。