这个逻辑条件失败的确切原因

时间:2015-11-26 16:16:09

标签: php if-statement

为什么下面的代码正在打印“here”,它应该是“there”

$a = "171E-10314";
if($a == '0')
{
echo "here";
}
else
{
echo "there";   
}

4 个答案:

答案 0 :(得分:5)

PHP会自动将字符串中的数字或整数解析为整数。 "171E-10314"是告诉PHP计算171 * 10 ^ -10314的另一种方法,它等同于(几乎)0。因此,当您执行$a == '0'时,'0'将根据PHP等同于0,并返回true

如果您想比较字符串,请使用strcmp函数或使用严格比较器===

答案 1 :(得分:1)

当你使用==比较时,PHP会尝试强制转换为不同的数据类型以检查匹配

在你的情况下:

  • '0'变为0
  • “171E-10314”在数学上仍然几乎为0,但我认为由于浮点数的分辨率,PHP只是将其舍入为0。

检查此链接是否有直观表示: http://www.wolframalpha.com/input/?i=171E-10314

答案 2 :(得分:0)

使用=== /*(this is for the 30 character)*/

答案 3 :(得分:0)

根据给出的答案,我试图将字符串转换为数字:

$a = "171E-10314" + 0;
print $a;

我的输出为0。

这就是为什么要在这里打印。