【问题标题】:Why does is_numeric(NAN) return TRUE?为什么 is_numeric(NAN) 返回 TRUE?
【发布时间】:2017-03-26 02:20:57
【问题描述】:

我已经测试了PHP中NAN常量中的is_numeric函数和给定的结果

is_numeric(NAN); // TRUE

但是 NAN 的意思是“不是数字”。为什么is_numeric函数返回true

我知道 NAN 是 float 类型。但是在测试下面两种情况时,结果是不同的:

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

为什么会这样?

对不起,我的英语不好

【问题讨论】:

  • “NOT A NUMBER”是数字对我来说似乎完全是愚蠢的。愚蠢,我的意思是愚蠢。我了解科学,但is_numeric 中应该有一行代码考虑到这一点并纠正错误...因为这是错误的

标签: php nan


【解决方案1】:

NAN 是一个非零浮点值。什么是 NAN,它是 (-1) 的平方根。

所以现在涉及复数。 (-1) 的平方根是 +i-i,这意味着 NAN 可以有两个值。因此,如果 NAN 的计算结果为 -ifalseNAN == false 将变为 true。

【讨论】:

    【解决方案2】:

    NAN 是一个特殊的常量。它必须持有一些价值,所以它持有float 数据类型

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

    问题在于filter_var 不是在比较数据类型,而是在寻找数字,即NAN is not

    某些数值运算可能会产生一个由常量 NAN 表示的值。此结果表示浮点计算中未定义或无法表示的值。此值与任何其他值(包括其自身)的任何松散或严格比较都将得到 FALSE。

    由于 NAN 代表任意数量的不同值,因此不应将 NAN 与其他值(包括其自身)进行比较,而应使用 is_nan() 检查 NAN。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2015-10-07
      • 2019-01-01
      • 1970-01-01
      • 2017-05-10
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多