Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java两整数相除向上取整[通俗易懂],希望能够帮助你!!!。
前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?
x / y + (x % y != 0 ? 1 : 0);
这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。
(int)Math.ceil((double)x/y);
// 或者
(int)Math.ceil(x * 1.0 /y);
首先,将被除数转换成double类型,再将计算的结果通过Math.ceil()函数向上取整,这种方式是网上经常可以看到的方式。
(x + y - 1) / y
这种方式为什么可以达到向上取整的效果呢,为什么x要加y - 1?
【2020/7/7 更新】网友在本评论区提供的证明方法,个人觉得更简洁,统一。因此,补充进来以供参考。感谢这位网友。
为了方便理解,我们通过具体的计算来说明。
对于可以整除的情况
x = 9,y = 3
(x + (y - 1)) / y
,x加上了一个比y小的数,最终(x + (y - 1)) / y = (x / y) ...y - 1
商为(x / y), 余数为(y - 1),余数相当于两数相除结果都小数部分,会被舍去,最终(x + (y - 1)) / y` = (x / y)
对于不可以整除的情况
x = 11, y = 3
11 / 3 = 3 ... 2
x + (y - 1) = (3 * 3 + 2) + (3 - 1) = (3 * 3 + 2 - 1)+ 3= (3 * 3 + 3) + 2 - 1
x + (y - 1) / y = ((3 * 3 + 3) + 2 - 1 )/ 3 = 4
就是x不能整除y余数肯定在1到y - 1之间,从中取出1给y - 1,使得被除数增加了一个y,进而商会增加1,余数部分为0到y - 2是会被舍去的。
最后总结
第一种方法:最简单、清楚,是比较推荐的;
第二种方法:虽然常见,但是涉及过多类型转换,个人不推荐
第三种方法:很巧妙,不太容易理解,也是推荐的
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。