将两个整数的除法四舍五入到下一个整数的正确方法是什么?
int a = 3;
int b = 2;
a / b = ? //should give 2
是Math.ceil()
正确的方法吗?
不,Math.ceil()
不会自行工作,因为问题发生得更早。a
和b
都是整数,因此将它们除以一个整数,该整数是除法实际结果的下限。对于a = 3
和b = 2
,结果是1
。一个的上限也是一个 - 因此你不会得到想要的结果。
你必须先解决你的部门。通过将操作数之一转换为浮点数,您可以获得所需的非整数结果。然后你可以用Math.ceil
它来四舍五入。此代码应该可以工作:
Math.ceil((double)a / b);
您可以使用此表达式(假设 a 和 b 为正)
(a+b-1)/b
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
2 个整数之间的除法(也称为integer division
)产生除法的剩余部分。
3/2 = 1
要使用 ceil,您需要进行非整数除法:
您可以将您的值声明为双精度(3.0
或3d
)或在除法之前对其进行转换:
((double) 3) / ((double) 2) = 1.5
这个双精度值可以在 ceil 中使用。
Math.ceil(3.0 / 2.0) = 2.0;