Java如何对除法得到的分数向上取整?现有代码结果错误如何修复?
问题排查与修复
现有代码错误原因
- 核心逻辑违背需求:需求固定返回area1除以area2的商向上取整结果,但你在area2>area1的分支中,错误返回了
area2/area1的计算结果,完全不符合要求,是小被除数场景结果异常的核心原因。 - 分支结构不严谨:两个独立的
if判断没有用else if关联,当area2大于area1且两数刚好整除时,会直接走到最终的else分支,返回错误的取整结果。 - 缺少参数校验:未对area2做非0/非负校验,会触发无穷值返回或算术异常。
- 命名不符合Java规范:Java方法惯例使用小驼峰命名,
round_up是Python的命名风格。
最优修复方案
Java内置Math.ceil()方法专门用于浮点数向上取整,无需自行编写复杂分支逻辑,修复后代码如下:
public class PizzaClal { public static void main (String[] args){ System.out.println(roundUp(15.0, 6.0)); // 输出3,符合预期 } static int roundUp(double area1, double area2) { // 先做参数合法性校验 if (area2 <= 0) { throw new IllegalArgumentException("面积参数不能为0或负数"); } double quotient = area1 / area2; // Math.ceil返回向上取整的double值,强转为int即可 return (int) Math.ceil(quotient); } }
自定义实现向上取整逻辑(如不想使用内置方法)
如果你想要手动实现向上取整逻辑,无需区分两个参数的大小,统一处理即可:
static int roundUp(double area1, double area2) { if (area2 <= 0) { throw new IllegalArgumentException("面积参数不能为0或负数"); } double quotient = area1 / area2; int intPart = (int) quotient; // 只要商不是整数,就返回整数部分+1,否则直接返回整数部分 return quotient > intPart ? intPart + 1 : intPart; }
内容的提问来源于stack exchange,提问作者Lisa McMurphy
相关产品推荐
相关产品推荐

