2016-11-11 22 views
6

Tôi đã thử nghiệm các is_numeric chức năng trong NAN liên tục trong PHP và kết quả choTại sao is_numeric (NAN) trả về TRUE?

is_numeric(NAN); // TRUE 

Nhưng NAN có nghĩa là "Not A Number". Tại sao hàm is_numeric trả lại true?

Tôi biết rằng NAN thuộc loại float. Nhưng khi thử nghiệm hai trường hợp dưới đây, kết quả khác nhau:

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

Tại sao phải làm như vậy?

Xin lỗi, tiếng anh của tôi là xấu

Trả lời

3

NAN là một hằng số đặc biệt. Nó phải giữ một số giá trị, vì vậy nó giữ một floatdatatype

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

Vấn đề là filter_var không so sánh các kiểu dữ liệu, nó đang tìm kiếm con số, mà NANis not.

Một số phép toán số có thể dẫn đến giá trị được biểu thị bằng hằng số NAN. Kết quả này đại diện cho một giá trị không xác định hoặc không thể đại diện trong các tính toán dấu phẩy động. Bất kỳ so sánh lỏng lẻo hoặc nghiêm ngặt nào về giá trị này so với bất kỳ giá trị nào khác, kể cả chính nó, sẽ có kết quả là FALSE.

Vì NAN đại diện cho bất kỳ số giá trị khác nhau, NAN không được so sánh với các giá trị khác, bao gồm cả chính nó và thay vào đó phải được kiểm tra để sử dụng is_nan().

1

NAN là giá trị dấu phẩy động khác 0. NAN là gì, một căn bậc hai của (-1).

Vì vậy, bây giờ nó liên quan đến các số phức. Căn bậc hai của (-1)+i hoặc -i có nghĩa là NAN có thể có hai giá trị. Vì vậy, nếu NAN được đánh giá là -i hoặc false, NAN == false sẽ trở thành sự thật thay thế.

Các vấn đề liên quan