JAVA分页算法
分页计算总页数的思想:向上取整(小数部分均不为0,整数部分直接加1,最后得到整数结果)
举个简单的例子:现在有101个鸡蛋,需要放入筐中,一个筐可以放10个鸡蛋,
那么101/10=10.1,我们就会需要11个筐(为避免看错把以下等式的修饰词加上括号)
11筐 = 10个(装满鸡蛋的)筐 + (装0.1筐鸡蛋的)1个筐
也就是说但凡多出一点,哪怕是0.0000000……1,我们都需要再多一个筐,
即结果需要向上取整。
举例说明向上取整:
4.000 向上取整结果 4 (小数部分为000,均为0,可直接转整数为4)
4.001 向上取整结果 5(小数部分为001,直接整数部分+1转整数为5)
明白了这些之后来看代码:
@Test
public void testComputPate() {
int total = 101;//总数
int pageSize = 10;//每页显示数
int totalPage;//总页数
int currentPage = 1;//当前页数
//本页起始序号(从0开始)
int start = (currentPage - 1) * pageSize;
//本页起始序号
int end = start + pageSize;
//计算总页数方法一(推荐):
totalPage = (total + pageSize - 1) / pageSize;
System.out.println("方法一得到的总页数:" + totalPage);
/* 理解:
1 <= total / pageSize 的余数 <= pageSize - 1
这里需要注意,因为java中,整数除以整数结果小数部分是直接抛弃的,也就是结果是向下取整的,
所以直接计算 total / pageSize 得到的结果会是 10 ,而不是11(用装鸡蛋来举例就是 筐放满才算一筐)
先加上最大余数再运算,可以理解为,先给9个鸡蛋,只要total / pageSize有余数,那就能和这9个鸡蛋凑够一个满筐
(纠结如果total / pageSize余数是2-9范围内,那么加上9结果范围为11-18的,可以再看下上句话,java整数除法运算结果是向下取整的,11-18个鸡蛋只能装满一个筐,那就只算一筐)
*/
//计算总页数方法二:
totalPage = (int) Math.ceil((double) total / pageSize);//Math.ceil()向上取整
System.out.println("方法二得到的总页数:" + totalPage);
/*
方法二:思想其实是一样的,这里有个小坑,还是java整数相除得到的结果是向下取整的,这里可以强转成double再向下取整
*/
System.out.println("错误结果:" + Math.ceil(total / pageSize));
}
运行结果: