java整数除法向零取整,如7/3=2、-7/3=-2;需其他取整方式时应转double后用math.floor/ceil/round;除零抛arithmeticexception,浮点除法则不同。

Java 中整数相除(如 int / int)默认直接截断小数部分,**向零取整**,不是四舍五入,也不是向下取整(floor)。这是由 Java 语言规范明确规定的。
整数除法的截断规则
当两个整数进行除法运算时,结果仍是整数,小数部分被完全丢弃(不四舍五入):
-
7 / 3→ 结果是2(不是2.33...,更不是3) -
-7 / 3→ 结果是-2(向零靠近,不是-3) -
7 / -3→ 结果是-2 -
-7 / -3→ 结果是2
如何实现其他取整方式
若需向下取整(floor)、向上取整(ceil)或四舍五入,不能依赖 /,而应借助类型转换或 Math 工具类:
-
向下取整(floor):先转为
double除,再用Math.floor(),最后转回long或int(注意溢出)
例:(int) Math.floor((double) -7 / 3)→-3 -
向上取整(ceil):同理用
Math.ceil()
例:(int) Math.ceil((double) 7 / 3)→3 -
四舍五入到最近整数:可用
Math.round((double) a / b)
例:Math.round((double) 7 / 3)→2;Math.round((double) 8 / 3)→3
注意除零异常和类型一致性
整数除零会抛出 ArithmeticException(运行时异常),且该行为与浮点数不同(0.0/0.0 得 NaN,1.0/0.0 得 Infinity)。
同时,确保操作数类型是整数类型(byte、short、int、long);若其中一个是 float 或 double,则自动按浮点除法执行,结果保留小数。
快速判断是否需要取整控制
写代码前先问自己:
- 业务逻辑要求的是“商的整数部分”(用
/即可)? - 还是“至少要多少份”(向上取整)?
- 或是“最多能分几份不超限”(向下取整)?
- 又或者“最接近的整数分配”(四舍五入)?
选错取整方式是常见 bug 来源,尤其在分页计算((total + pageSize - 1) / pageSize 是常用向上取整技巧)、资源分配、坐标对齐等场景中。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











