最近在做DRP项目,看到一条这样的语句:int TotalPagesize; TotalPagesize=(totalRecords + pageSize - 1)/pageSize,意思是 页数=(总数据 + 每页数据 -1)/ 每页数据。
刚开始看到这句话时没明白。按常规的计算来想应该是 页数 = 总数据 / 每页数据,就这么简单。
可是,再一想,最终要的结果"页数”必须是整数,而且必须为全部向上取整。所以,直接用 总数据/每页数据 会发生两种情况:(1)当结果正好为整数时,结果正确。(2)当结果为小数时,会导致结果正好差1。
分析到这就想起当年做机房收费系统时的收费问题。前提是按30分钟为单位收费,不足30分钟也按30分钟计算。这里只要知道总共用了多少个单位时间,再乘以单价就可以计算出上机费用了。
这个单位时间的计算和现在这个页数的计算是一样的原理。只不过当时是这样做的:
unitTime = TotalTime / 30
if (int ( unitTime ) == unitTime) { //向下取整后还和原来的结果一样,也就是说unitTime正好为整数
Time = unitTime;
}
else{ //也就是说unitTime为小数
Time = int ( unitTime ) + 1;
}
而现在这句话TotalPagesize=(totalRecords + pageSize - 1)/pageSize,却做了同样的事情。