计算页数的最简单的公式?

Ben*_*nny 68 c# pagination

我有一个数组,我想根据预设的页面大小将它们分成页面.

这是我的方式:

private int CalcPagesCount()
{
    int  totalPage = imagesFound.Length / PageSize;

    // add the last page, ugly
    if (imagesFound.Length % PageSize != 0) totalPage++;
    return totalPage;
}
Run Code Online (Sandbox Code Playgroud)

我觉得计算不是最简单的(我的数学很差),你能给出一个更简单的计算公式吗?

Joh*_*ica 159

强制它向上舍入:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Run Code Online (Sandbox Code Playgroud)

或者使用浮点数学:

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);
Run Code Online (Sandbox Code Playgroud)

  • 危险...当`PageSize = int.MaxValue`时,会导致溢出。我添加了一个不易溢出的答案。 (2认同)
  • 为了避免溢出,您可以将公式重构为:(((imagesFound.Length-1)/ PageSize)+ 1` (2认同)

Tom*_*Tom 20

实际上,你已经接近最好的办法了.关于我能想到的唯一可能是"更好"的东西是这样的:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;
Run Code Online (Sandbox Code Playgroud)

而且这个更好的唯一原因是你避免使用if语句.


Boo*_*Boy 18

int pages = ((count - 1) / PAGESIZE) + 1;
Run Code Online (Sandbox Code Playgroud)

  • @佩维尔·梅尔尼科夫。我认为从纯粹迂腐的意义上来说这是错误的,但这取决于上下文。在我使用它的代码中,我总是想要至少 1 页(即使有 0 个项目,0 页也是无效的)。我至少应该添加一个注释。 (2认同)
  • @PavelMelnikov,这并不完全错误。只取决于你想如何看待它。但是,它总是返回至少 1 页的假设是不正确的。0 条记录和 1 的页面大小将导致 0。因此,要么不允许页面大小为 0,要么进行检查。 (2认同)

Jer*_*emy 9

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;
Run Code Online (Sandbox Code Playgroud)


小智 7

一直用这个公式:

int totalPages = items.Count / pageSize + (items.Count % pageSize > 0 ? 1 : 0);
Run Code Online (Sandbox Code Playgroud)