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