Java中%是取余运算符,结果符号由被除数决定,非数学模运算;需非负余数时应使用(a % b + b) % b校正。

Java 中的取模运算符 % 用于计算两个整数相除后的余数,但它的结果**不一定总是非负数**——它遵循“被除数符号决定余数符号”的规则,这点和数学中的“模运算”(非负最小剩余)不同。
余数的正负由被除数决定
Java 的 % 是“取余”(remainder),不是严格意义上的“取模”(modulo)。它的定义是:
a % b == a - (a / b) * b,其中 / 是向零取整的整数除法(即截断除法)。
因此:
- 若被除数 a ≥ 0,则 a % b ≥ 0(当 b > 0 时)
- 若被除数 a ,则 a % b (当 b > 0 时)
例如:
7 % 3 → 1 -7 % 3 → -1 7 % -3 → 1 -7 % -3 → -1
想得到数学意义下的非负余数(0 到 |b|-1 之间)
如果需要类似数学中“模 b”的结果(即余数始终在 [0, |b|) 范围内),需手动校正:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
对正整数 b,可用:
(a % b + b) % b
说明:
- a % b 可能为负,加上 b 后保证非负
- 再对 b 取一次模,确保结果落在 [0, b) 内
示例:
(-7 % 5 + 5) % 5 → (-2 + 5) % 5 → 3 % 5 → 3 ✔️(符合数学模 5 的余数)
常见误区提醒
- 不要假设 % 总返回非负数——负被除数时会返回负余数
- 除数为负不影响余数符号规则,只影响除法截断方向;实际开发中建议除数用正数,避免混淆
- 对浮点数也支持 %(如 5.5 % 2.0 → 1.5),但需注意浮点精度问题
判断余数是否为 0 的安全写法
多数场景(如判断奇偶、轮询、哈希桶索引)只关心是否整除,这时直接用 a % b == 0 即可,不受符号影响:
(-6 % 3 == 0) → true (10 % 2 == 0) → true
只要逻辑不依赖余数的正负值,就不需额外处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










