PHP if语句无法验证"!== 0"

Mat*_*tte 0 php if-statement equality

如何才能实现以下目标:

$varnum = 4;
if( $varnum/4 - floor($varnum/4) !== 0){
    echo 'foo';
}
Run Code Online (Sandbox Code Playgroud)

这与运行PHP 5.1.6的服务器上的'foo'相呼应.如果我改变操作员,==我得到相同的结果.

我不知道为什么,但可能是因为"=="是"等于"而"!=="是"不相同"?那怎么会让它们相同呢?我想在javaScript中我会"parseInt",但在PHP中没有这样的东西,对吧?

Spu*_*ley 5

这个失败的原因是因为在PHP中,floor函数返回a float,尽管该值总是一个整数.您可以在此处的文档中看到这一点:http://php.net/manual/en/function.floor.php

您正在将该浮点数的固定类型比较与整数零进行比较,因此无论该值是否实际为零,结果都为false.

为了解决这个问题,要么:

  • 将输出floor转换为整数 - intval(float(...))或者(int)float(..)
  • !=而不是!==.
  • 使用0.0而不是仅仅0比较.

如果你想知道为什么floor()会返回一个浮点而不是一个整数,那是因为输入是一个浮点数.float数据类型具有比整数更大的可能范围,因此可以调用floor()一个太大而不能保存在整数中的值.因此,函数返回整数是不安全的; 它返回一个浮点数,以便它可以保证结果是正确的.

乍一看似乎很奇怪,但希望这能为你解释它背后的逻辑.