检查一些未知类型是否为0的最安全的方法是什么? AKA为什么float(0)不等于(int)0?

时间:2013-10-17 04:48:03

标签: php floating-point comparison

有人可以帮我理解为什么会这样吗?

$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );

这会产生:

float(0)
int(0)
bool(false)

我真的不明白为什么,我知道巨大的红色警告here,但不是0应该是0?或者PHP实际上是在比较变量类型(float与int)?

假设是这种情况,检查一个数字(不知道其确切类型)是否为0的最安全的方法是什么?

感谢。

4 个答案:

答案 0 :(得分:1)

int(0)float(0)相同,只是当您使用===时,会比较输入和值。在这种情况下,值相同但类型不同,因此其false。 这些值为Equal,但不是Identical

int(0) == float(0)    // true because only value is compared, which is same.
int(0) === float (0)  // false because even though value is same, type is also compared, which is different
  

$ a === $ b'相同'如果$ a等于$ b,则为TRUE,它们属于同一类型   $ a == $ b'等于'如果在类型杂耍之后$ a等于$ b,则为TRUE。

Reference:

测试变量的数值是否为0的好方法是:

if (intval($zero)==0)
{
  // $zero is 0 in numeric terms. You can even send it a string to test, which will be 0
}

阅读http://php.net/manual/en/types.comparisons.php

答案 1 :(得分:0)

===比较类型和值。如果您只想比较值,请使用==

$zero = (float)0;
var_dump($zero);
var_dump(0);
var_dump( ($zero === 0) );
var_dump( ($zero == 0) );

会回来 浮动(0) INT(0) 布尔(假) 布尔(真)

答案 2 :(得分:0)

这是因为===比较类型和值,==仅比较值

$foo = 0;

var_dump((float)$foo==(int)$foo); //Produces true

var_dump((float)$foo===(int)$foo); //Produces false

答案 3 :(得分:0)

实际上他们是两个比较运营商

==仅检查值的相等性

===检查类型和值的相等性。