我特别考虑的是如何在使用c#或Java等语言时显示分页控件。
如果我有x个项目,我想在每页y块中显示,需要多少页?
我特别考虑的是如何在使用c#或Java等语言时显示分页控件。
如果我有x个项目,我想在每页y块中显示,需要多少页?
当前回答
尼克·贝拉尔迪(Nick Berardi)回答的一个变种,避开了一个分支:
int q = records / recordsPerPage, r = records % recordsPerPage;
int pageCount = q - (-r >> (Integer.SIZE - 1));
备注:(-r >>(整数。SIZE - 1))由r的符号位组成,重复32次(感谢>>操作符的符号扩展)。如果r为0或负,它的值为0,如果r为正,它的值为-1。如果记录% recordsPerPage > 0,那么从q中减去它的效果是加1。
其他回答
您需要执行浮点除法,然后使用ceiling函数将值四舍五入到下一个整数。
我做以下,处理任何溢出:
var totalPages = totalResults.IsDivisble(recordsperpage) ? totalResults/(recordsperpage) : totalResults/(recordsperpage) + 1;
并使用这个扩展,如果有0结果:
public static bool IsDivisble(this int x, int n)
{
return (x%n) == 0;
}
此外,对于当前的页码(没有被问到,但可能有用):
var currentPage = (int) Math.Ceiling(recordsperpage/(double) recordsperpage) + 1;
如何在c#中四舍五入整数除法的结果
我有兴趣知道在c#中做这件事的最好方法是什么,因为我需要在循环中做这件事近10万次。其他人使用Math发布的解决方案在答案中排名靠前,但在测试中我发现它们很慢。Jarod Elliott提出了一个更好的策略来检查mod是否产生任何东西。
int result = (int1 / int2);
if (int1 % int2 != 0) { result++; }
我循环运行了100万次,花了8毫秒。下面是使用Math的代码:
int result = (int)Math.Ceiling((double)int1 / (double)int2);
在我的测试中运行了14毫秒,相当长的时间。
Ian提供的整数数学解决方案很好,但存在整数溢出错误。假设变量都是int,解决方案可以重写为使用长数学和避免错误:
int pageCount = (-1L + records + recordsPerPage) / recordsPerPage;
如果记录很长,则错误仍然存在。模解没有这个bug。
你可以使用
(int)Math.Ceiling(((decimal)model.RecordCount )/ ((decimal)4));