5

将两个整数的除法四舍五入到下一个整数的正确方法是什么?

int a = 3;
int b = 2;

a / b = ? //should give 2

Math.ceil()正确的方法吗?

4

4 回答 4

26

不,Math.ceil()不会自行工作,因为问题发生得更早。ab都是整数,因此将它们除以一个整数,该整数是除法实际结果的下限。对于a = 3b = 2,结果是1。一个的上限也是一个 - 因此你不会得到想要的结果。

你必须先解决你的部门。通过将操作数之一转换为浮点数,您可以获得所需的非整数结果。然后你可以用Math.ceil它来四舍五入。此代码应该可以工作:

Math.ceil((double)a / b);
于 2013-10-30T17:00:12.357 回答
22

您可以使用此表达式(假设 a 和 b 为正)

(a+b-1)/b
于 2013-10-30T16:59:52.393 回答
4

Math.ceil 方法的返回类型是double其中 Math.round 的返回类型是int。所以如果你想要,结果将是整数,那么你应该使用 Math.round 方法,否则 Math.ceil 方法很好。

float x = 1654.9874f;     
System.out.println("Math.round(" + x + ")=" + Math.round(x));   
System.out.println("Math.ceil(" + x + ")=" + Math.ceil(x));

输出

Math.round(1654.9874)=1655

Math.ceil(1654.9874)=1655.0
于 2013-10-30T17:19:36.530 回答
3

2 个整数之间的除法(也称为integer division)产生除法的剩余部分。

3/2 = 1

要使用 ceil,您需要进行非整数除法:

您可以将您的值声明为双精度(3.03d)或在除法之前对其进行转换:

((double) 3) / ((double) 2) = 1.5

这个双精度值可以在 ceil 中使用。

Math.ceil(3.0 / 2.0) = 2.0;
于 2013-10-30T17:00:14.093 回答