题
我有一个数组,我想根据预设的页面大小将它们分成页面。
我就是这样做的:
private int CalcPagesCount()
{
int totalPage = imagesFound.Length / PageSize;
// add the last page, ugly
if (imagesFound.Length % PageSize != 0) totalPage++;
return totalPage;
}
我觉得计算不是最简单的(我的数学很差),你能给出一个更简单的计算公式吗?
解决方案
强制它围捕:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
或使用浮点数学:
totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
其他提示
实际上,你已经接近了所能做的最好的事情。关于我能想到的唯一可能是“更好”的事情。是这样的:
totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
唯一的原因就是你避免使用if语句。
注意:如果页面大小为>您将始终获得至少1页,即使是0计数也是如此。 1,这是我需要的,但可能不是你需要的。页面大小为1(愚蠢但技术上有效),计数为0将为零页。根据您的需要,您可能需要检查计数和值的零值。页面大小为1
int pages = ((count - 1) / PAGESIZE) + 1;
OP包含有效答案。如果我想关闭分页,那么我可以设置 PageSize = int.MaxValue
。
这里有几个答案添加到 PageSize
( imagesFound.Length + PageSize
),这会导致溢出。这会导致错误的结果。
这是我要使用的代码:
int imageCount = imagesFound.Length;
// include this if when you always want at least 1 page
if (imageCount == 0)
{
return 1;
}
return imageCount % PageSize != 0
? imageCount / PageSize + 1
: imageCount / PageSize;
为了避免页面编号出错,我可以考虑通过以下行来计算noOfPages的最佳方法
totalPage = Math.Ceiling(imagesFound.Length / PageSize);
当PageSize == imagesFound.Length
时,这不应该给你第2页不隶属于 StackOverflow