计算页数的最简单公式?


77

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

这是我的方法:

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

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

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

Answers:


180

强制将其四舍五入:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

或使用浮点运算:

totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);

2
危险...导致溢出PageSize = int.MaxValue。我添加了一个不易溢出的答案。
杰里米(Jeremy)

5
为避免溢出,您可以将公式重构为:((imagesFound.Length - 1) / PageSize) + 1
AdrianRM

21

实际上,您已尽力而为。我唯一想到的可能是“更好”,是这样的:

totalPage = (imagesFound.Length + PageSize - 1) / PageSize;

这样做更好的唯一原因是避免使用if语句。


危险...导致溢出PageSize = int.MaxValue。我添加了一个不易溢出的答案。
杰里米(Jeremy)

19

注意:如果页面大小> 1,您将始终获得至少1页,即使计数为0,这也是我需要的,但可能不是您所需要的。页面大小为1(无聊,但在技术上有效)并且计数为0将为零页面。根据您的需要,您可能需要检查计数和页面大小是否为1的零值

int pages = ((count - 1) / PAGESIZE) + 1;

是的,更简单。简单但错误。如果count = 0,则页面= 1
Pavel Melnikov

1
@Pevel Melnikov。我认为从纯粹的学究意义上讲,这是错误的,但它取决于上下文。在我使用的代码中,我总是希望至少有1页(即使有0个项目,0页也是无效的)。我至少应该添加一个注释。
Booji Boy

1
@PavelMelnikov,这不是完全错误的。只取决于您要如何看待它。但是,始终返回至少一页的假设是不正确的。0条记录,且页面大小为1将导致0。因此,要么不允许页面大小为0,要么进行检查。
迈克尔

12

OP包含有效答案。如果我想关闭分页,则可以设置PageSize = int.MaxValue

这里有几个答案加到PageSizeimagesFound.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;

1
  1. 您可以在Sql Server中获取总页数:-
DECLARE @PageCount INT;
DECLARE @NoOfData INT;
SET @NoOfData = (select Count(*) AS [PageCount] from YourTableName)
SET @PageCount=((@NoOfData+@PageSize-1)/@PageSize)
SELECT @PageCount AS [PageCount]
  1. 您可以输入您的代码-
int totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);


1

以下为我工作:

if(totalRecords%value === 0){
  count = (totalRecords) / value;
}
else {
  count = Math.floor((totalRecords + value - 1) / value);
}

0

我写给自己的东西:

private int GetPageCount(int count, int pageSize)
{
    int result = 0;

    if(count > 0)
    {
        result = count / pageSize;
        if(result > 0 && (count > (pageSize * result)))
        {
           result++;
        }
    }

    return result;
}

(当然,请不要设置pageSizeint.MaxValue


0

以下是用于计算List中的分页的工作代码:

              int i = 0;
              int pagecount = 0;
              int pageSize = 50;

清单项目=新清单();要做的事:在列表中添加项目:

              if (Items.Count() != 0)
              {
                    int pageNumber = Total Records / 50;

                          for (int num = 0; numi < pageNumber; num++)
                          {
                                var x = Items.Skip(i * pageSize).Take(pageSize);
                                i++;
                          }

                    var y = Items.Skip(i * pageSize).Take(pageSize);
              }

-1

为了避免页面编号出错,我想到的计算noOfPages的最佳方法是执行以下行

totalPage = Math.Ceiling(imagesFound.Length / PageSize);

当PageSize == imagesFound.Length时,这不应给您第2页


1
我认为这是不正确的。如果长度为3,页面大小为2,则需要2页(第一页包含2个项目,第二页包含1个项目)。这样做将为您提供(3-1)/ 2 = 1页。
joshhendo's

感谢您的注意,并更改了原始帖子以适应该情况
Clayton C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.