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関数が を返すためです。floatこれは、次のドキュメントで確認できます: http://php.net/manual/en/function.floor.php

その float と整数ゼロの固定型比較を行っているため、値が実際にゼロであるかどうかに関係なく、結果は false になります。

これを修正するには、次のいずれかを行います。

  • floorの出力を整数にキャストします-intval(float(...))または(int)float(..)
  • !=の代わりに使用し!==ます。
  • 単に比較する0.0代わりに使用します。0

floor()なぜ整数ではなく浮動小数点数を返すのか疑問に思っている場合は、入力が浮動小数点数であるためです。float データ型は、integer よりも可能な範囲が広いためfloor()、integer で保持するには大きすぎる値を呼び出すことができます。したがって、関数が整数を返すことは安全ではありません。結果が正しいことを保証できるように、代わりに float を返します。

一見奇妙に思えるかもしれませんが、これでその背後にあるロジックが説明できることを願っています。

于 2013-01-27T20:06:06.170 に答える
2

あなたが達成しようとしていることは何ですか?$varnum が 4 で割り切れるかどうかを確認しようとしている場合は、モジュラスを使用してください。

$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 に答える