以下怎么可能:
$varnum = 4;
if( $varnum/4 - floor($varnum/4) !== 0){
echo 'foo';
}
这在我运行 PHP 5.1.6 的服务器上呼应了“foo”。如果我将运算符更改为==
我得到相同的结果。
我不知道为什么,但可能是因为“==”是“等于”而“!==”是“不相同”?那么我如何使它们相同?我想在 javaScript 中我会“parseInt”,但 PHP 中没有这样的东西,对吧?
以下怎么可能:
$varnum = 4;
if( $varnum/4 - floor($varnum/4) !== 0){
echo 'foo';
}
这在我运行 PHP 5.1.6 的服务器上呼应了“foo”。如果我将运算符更改为==
我得到相同的结果。
我不知道为什么,但可能是因为“==”是“等于”而“!==”是“不相同”?那么我如何使它们相同?我想在 javaScript 中我会“parseInt”,但 PHP 中没有这样的东西,对吧?
失败的原因是因为在 PHP 中,该floor
函数返回 a float
,尽管该值始终是整数。您可以在此处的文档中看到这一点:http: //php.net/manual/en/function.floor.php
您正在将该浮点数与整数零进行固定类型比较,因此无论该值是否实际上为零,结果都是错误的。
要解决此问题,请执行以下任一操作:
floor
转换为整数 -intval(float(...))
要么(int)float(..)
!=
而不是!==
.0.0
而不是仅仅0
用来比较。如果您想知道为什么floor()
会返回浮点数而不是整数,那是因为输入是浮点数。浮点数据类型具有比整数更大的可能范围,因此可以调用floor()
一个太大而无法保存在整数中的值。因此,函数返回整数是不安全的;它返回一个浮点数,以便它可以保证结果是正确的。
乍一看似乎很奇怪,但希望这可以为您解释其背后的逻辑。
你想要完成什么?如果您想查看 $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';
}