0

以下怎么可能:

$varnum = 4;
if( $varnum/4 - floor($varnum/4) !== 0){
    echo 'foo';
}

这在我运行 PHP 5.1.6 的服务器上呼应了“foo”。如果我将运算符更改为==我得到相同的结果。

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

4

2 回答 2

5

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

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

要解决此问题,请执行以下任一操作:

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

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

乍一看似乎很奇怪,但希望这可以为您解释其背后的逻辑。

于 2013-01-27T20:06:06.170 回答
2

你想要完成什么?如果您想查看 $varnum 是否可被四整除,请使用模数,所以...

$varnum = 4;
if ($varnum % 4 != 0) {
    echo "foo - $varnum is divisible by 4";
}

您的原始帖子应使用 '!=' 与 '!==',如下所示:

$varnum = 4;
if( $varnum/4 - floor($varnum/4) != 0){
    echo 'foo';
}
于 2013-01-27T20:12:04.000 回答