← 数字拆解求和:PHP循环取余法完整拆解 PHP中的素数判定与生成:从基础逻辑到实战应用 →

奇数偶数判断:PHP取模运算的两种写法

原创 2026-05-21 PHP 已有人查阅

群里有人问:判断奇数偶数是不是只用%2就行了?基本上是的。但实际写代码时,有几个细节值得注意,尤其是表单传值和数据类型。

判断规则

  • 偶数:能被2整除的数。如2、4、6、8、10等,余数为0。

  • 奇数:不能被2整除的数。如1、3、5、7、9等,余数为1。

核心就是除法取余。

基础写法:固定数值判断

<?php  
$number = 1233456;  

if ($number % 2 == 0) {  
    echo "$number 是偶数";   
} else {  
    echo "$number 是奇数";  
}   
?>  

输出:1233456 是偶数

这个写法够用。但$number % 2返回的结果,在PHP里对负数也有效。负数取余的结果可能是负数,但判断时==0不受影响。

表单写法:接收用户输入

项目开发中数字经常来自用户提交,下面这个例子演示了表单处理流程。

<html>  
<body>  
<form method="post">  
    输入一个数字:  
    <input type="number" name="number">  
    <input type="submit" value="提交">  
</form>  
</body>  
</html>  

<?php   
if ($_POST) {  
    $number = $_POST['number'];   

    if (($number % 2) == 0) {  
        echo "$number 是偶数";  
    } else {  
        echo "$number 是奇数";  
    }  
}  
?>  

输入23456 → 输出23456 是偶数
输入285965 → 输出285965 是奇数

个人经验:一个容易踩的坑

代码号学习编程时,很多初学者忽略了一个问题:<input type="number">在HTML5里返回的是字符串类型,但PHP的取模运算会自动把字符串转成数字。大部分情况下没问题。

但要注意:如果用户不输入任何内容直接提交,$_POST['number']可能是空字符串。空字符串在取模运算中会被当作0,程序会输出“0是偶数”。从逻辑上讲0确实是偶数,但这可能不是用户想要的结果。

个人建议:加一个非空判断。

if ($_POST && isset($_POST['number']) && $_POST['number'] !== '') {  
    $number = $_POST['number'];  
    // 后续判断逻辑  
} else {  
    echo "请输入有效的数字";  
}  

为什么用取模运算符而不是其他方法?

有些开发者可能会问:用$number / 2然后判断是不是整数行不行?

比如is_int($number / 2)。这个写法在PHP里有问题,因为$number / 2的结果可能是浮点数(比如7/2=3.5),用is_int()判断3.5会返回false,逻辑上是对的,但多了一次类型转换。取模运算%就是为这种场景设计的,更直接、性能开销更小。

本节课程知识要点

  1. %取模运算符是判断奇偶数的常用工具

  2. 偶数判断条件:$number % 2 == 0

  3. 表单传值时建议加上非空校验和isset()判断

  4. type="number"输入框仍需要后端校验,前端验证可绕过

换几个例子跑一遍

示例1:数字0
0 % 2 = 0,输出偶数。数学上0是偶数,这个结果正确。

示例2:负数
-7 % 2 = -1(PHP的取余结果符号与被除数相同),不等于0,输出奇数。这也是正确的。

示例3:大整数
PHP整数类型在64位环境下可以处理到9e18左右。超过这个范围会变成浮点数,浮点数取模会有精度问题。如果需要处理超大整数,可以考虑用fmod()函数或BCMath扩展。

扩展:位运算判断法

除了取模,还可以用位运算。偶数的二进制之后一位是0,奇数之后一位是1。

if (($number & 1) == 0) {  
    echo "偶数";  
} else {  
    echo "奇数";  
}  

&是按位与运算符。$number & 1只保留之后一位二进制。这个方法比取模稍微快一点,但可读性差一些。日常开发用取模就够了,对性能要求很高的场景才考虑位运算。

← 数字拆解求和:PHP循环取余法完整拆解 PHP中的素数判定与生成:从基础逻辑到实战应用 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号