2016-11-11 17 views
6

Ja testowałem funkcję is_numeric w NAN stałą w PHP i danego wynikuDlaczego is_numeric (NAN) zwraca TRUE?

is_numeric(NAN); // TRUE 

Ale NAN oznacza "Not a Number". Dlaczego funkcja is_numeric powraca?

Wiem, że NAN ma typ float. Ale podczas testowania dwóch poniższych przypadków wyniki są różne:

is_float(NAN) // true 
filter_var(NAN, FILTER_VALIDATE_FLOAT)// false 

Dlaczego to zrobiłem?

Niestety, mój angielski jest zły

Odpowiedz

3

NAN jest specjalną stałą. To musi posiadać pewną wartość, więc trzyma floattyp danych

var_dump(NAN); // float(NAN); 

Problemem jest to, że nie jest filter_var porównując typy danych, to patrząc na numery, które NANis not.

Niektóre operacje numeryczne mogą dać wartość reprezentowaną przez stałą wartość NAN. Ten wynik reprezentuje nieokreśloną lub niereprezentowalną wartość w obliczeniach zmiennoprzecinkowych. Wszelkie luźne lub ścisłe porównania tej wartości z dowolną inną wartością, w tym z samą sobą, będą miały wynik FALSE.

Ponieważ NAN reprezentuje dowolną liczbę różnych wartości, NAN nie należy porównywać z innymi wartościami, w tym z samą sobą, a zamiast tego należy sprawdzić, czy jest używana funkcja is_nan().

1

NAN jest niezerową wartością zmiennoprzecinkową. Co to jest NAN, jest to pierwiastek kwadratowy z (-1).

Więc teraz chodzi o liczby zespolone. Pierwiastek kwadratowy z (-1) to +i lub -i, co oznacza, że ​​NAN może mieć dwie wartości. Jeśli więc NAN miałaby być oceniany jako -i lub false, to zamiast tego stałoby się prawdą NAN == false.

Powiązane problemy