【问题标题】:Check if given number is Even, Odd or Neither in PHP? [duplicate]检查给定的数字在 PHP 中是偶数、奇数还是非偶数? [复制]
【发布时间】:2015-06-12 01:39:28
【问题描述】:

如何使用 PHP 获得一个数字是偶数还是奇数或两者都不是(有小数,如 1.5)?我知道有*/之类的运算符,但是没有用。
这是一个尝试(当然它没有)(只是为了找出它是否是偶数):

function even($n) {
    return (($n/2)*2 == $n);
}
echo even(1); // true (should be false)
echo even(2); // true

【问题讨论】:

    标签: php floating-point numbers integer


    【解决方案1】:

    怎么样

    function even($n) {
        if (!is_int($n)) {return 'n';}
        return !($n % 2);
    }
    
    even(1); // false;
    even(2); // true;
    even(1.5); // 'n'
    

    这里的危险是如果用作布尔值,'n' 将评估为false。返回一些特定的常量而不是 true 或 false 可能会更好。 OP 没有指定返回值应该是什么。

    【讨论】:

    • 我是否遗漏了一些东西 - 我无法弄清楚为什么有这个 return 'n'false?那是代表“两者都不是”吗?
    • 如果参数不是整数,则返回 'n' for 'neither' - OP 在这一点上不是很清楚。
    • 酷。我很想删除该反对票,但不幸的是它不是我的。
    【解决方案2】:

    这很简单。 modulo (%) 是您想要的运算符,它确定如果 x 除以 y 是否会有余数...例如 (3 % 2 = 1) 和 (4 % 2 = 0)。 以前也有人问过这个问题——很常见的问题——你真的只需要看看你的数字 $n % 2 是否等于 0。

    php test if number is odd or even

    【讨论】:

      【解决方案3】:

      首先检查给定号码是否为integer。并按位& 检查它是偶数还是奇数。这是一个例子......

      if (is_int($n)) {
          if ($n & 1) {
              echo 'Odd!';
          } else {
              echo 'Even!';
          }
      } else {
          echo "Not a Integer!";
      }
      

      希望这有帮助。

      【讨论】:

        【解决方案4】:

        使用模运算符 (%) 确定整数是否可被 2 整除。您还需要 abs() 处理负数,并使用 is_int() 处理模运算符不能正确处理的事实浮点数字。示例实现如下:

        function is_even($num) {
            return is_int($num) && abs($num % 2) == 0;
        }
        function is_odd($num) {
            return is_int($num) && abs($num % 2) == 1;
        }
        // this last one seems self-explanatory, but if you want it, here it is
        function is_neither_even_nor_odd($num) {
            return !is_even($num) && !is_odd($num);
        }
        
        // Tests: The following should all output true:
        var_dump(
            is_even(0),
            is_even(2),
            is_even(-6),
            is_even(51238238),
            is_odd(1),
            is_odd(-1),
            is_odd(57),
            is_neither_even_nor_odd(1.5),
            is_neither_even_nor_odd(2.5),
            is_neither_even_nor_odd(-0.5),
            is_neither_even_nor_odd(0.00000001)
            );
        

        Here's a demo.

        【讨论】:

        • 非整数不能信任模运算符:2.5 % 2 == 0 // => true
        【解决方案5】:

        is_numeric 如果给定变量是数字,则返回 true

        is_int 如果给定变量是整数,则返回 true

        模运算符%可用于确定整数是偶数还是奇数:

        $num % 2 == 0 // returns true if even, false if odd
        

        【讨论】:

        • 回馈支持,因为您在我的回答中指出了这一点:$num % 2 == 0 对于像 2.5 这样的非整数也返回 true...
        猜你喜欢
        • 2011-11-12
        • 2015-05-31
        • 2023-01-20
        • 1970-01-01
        • 2013-12-09
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多