计算页数的最简单公式?

Posted

技术标签:

【中文标题】计算页数的最简单公式?【英文标题】:The simplest formula to calculate page count? 【发布时间】:2010-12-09 08:01:46 【问题描述】:

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

我就是这样做的:

private int CalcPagesCount()

    int  totalPage = imagesFound.Length / PageSize;

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

感觉计算不是最简单的(我数学不好),能不能给个更简单的计算公式?

【问题讨论】:

imo,感觉“丑陋”的不是你有一个“if”,而是你第一次计算的“totalPage”不是实际的总页数,你必须在互补演算中“修补”它。请参阅下面的答案,它只添加语义代码。 【参考方案1】:
var pageCount = (int)Math.Ceiling((float)_collection.Count / (float)_itemsPerPage);

说明:

集合中的项目数除以每页的项目数。然后使用 Math.Ceiling 将此数字四舍五入到最接近的整数。

例如“书”中的 7 项 / 每页 3 项 = 2.33。 2.33 向上取整到最接近的 int = 3。

【讨论】:

【参考方案2】:

一直使用这个公式:

int totalPages = items.Count / pageSize + (items.Count % pageSize > 0 ? 1 : 0);

【讨论】:

【参考方案3】:

只是语义代码,它明确了部分结果,并使任何读者都能清楚地了解计算出的内容。我更喜欢这个紧凑的公式:

    private int calculateNbPages(int nbResults, int pageSize)
        
            int  nbFullyFilledPages = nbResults / pageSize;
            int nbPartiallyFilledPages = (nbResults % pageSize == 0) ? 0 : 1;
            
            return nbFullyFilledPages + nbPartiallyFilledPages;
        

【讨论】:

【参考方案4】:

以下对我有用:

if(totalRecords%value === 0)
  count = (totalRecords) / value;

else 
  count = Math.floor((totalRecords + value - 1) / value);

【讨论】:

【参考方案5】:

以下是计算列表中分页的工作代码:

              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);
              

【讨论】:

【参考方案6】:

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;

【讨论】:

【参考方案7】:

我自己写的:

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;

(当然,不要将pageSize 设置为int.MaxValue

【讨论】:

【参考方案8】:
    您可以在 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]
    您可以输入您的代码-
int totalPage = (int) Math.Ceiling((double) imagesFound.Length / PageSize);

【讨论】:

【参考方案9】:

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

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

【讨论】:

是的,更简单。更简单但错误。如果 count = 0 那么 pages = 1 @Pevel Melnikov 。我想在纯粹的迂腐意义上这是错误的,但这取决于上下文。在我使用它的代码中,我总是想要至少 1 页(即使有 0 个项目,0 页也是无效的)。我至少应该添加一个注释。 @PavelMelnikov,这并不完全是错误的。只是取决于你想如何看待它。但是,它总是返回至少 1 页的假设是不正确的。 0 条记录和 1 的页面大小将导致 0。因此,要么不允许页面大小为 0,要么进行检查。【参考方案10】:

为避免页码出现错误,我能想到的计算 noOfPages 的最佳方法是执行以下行

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

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

【讨论】:

我不认为这是有效的。如果您有 3 的长度和 2 的页面大小,您会期望 2 页(第一页有 2 个项目,第二页有 1 个)。这样做会给你 (3-1)/2 = 1 页。 修改了原始帖子以适应这一点,感谢您的关注【参考方案11】:

实际上,你已经接近你能做的最好的了。关于我能想到的唯一可能“更好”的事情是这样的:

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

这更好的唯一原因是你避免了 if 语句。

【讨论】:

危险...这会导致PageSize = int.MaxValue 时溢出。我添加了一个不易溢出的答案。【参考方案12】:

强制四舍五入:

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

或使用浮点数学:

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

【讨论】:

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

以上是关于计算页数的最简单公式?的主要内容,如果未能解决你的问题,请参考以下文章

PHP分页初探 一个最简单的PHP分页代码的简单实现

计算 Euler Phi N 的最简单方法是啥?

iOS 中带有分页的 UICollectionView 的页数

PHP分页初探 一个最简单的PHP分页代码实现

PHP分页初探 一个最简单的PHP分页代码实现

PHP分页初探 一个最简单的PHP分页代码实现