根据 Total 和 PerPage 值确定页数

Posted

技术标签:

【中文标题】根据 Total 和 PerPage 值确定页数【英文标题】:Determine # of pages from Total and PerPage values 【发布时间】:2010-11-08 12:00:40 【问题描述】:

确定您提供了多少页数据的最优雅的方法是什么(在 C# 中):

a.) 总记录 b.) 每页记录数。

目前我正在工作,但它使用 if/else 检查该值是否大于总数(1 页)或更多,然后必须截断小数位,执行 mod 操作并添加 1 if有一个尾随小数。

我确信有一个数学函数可以为我做很多这样的事情并且不是那么难看。

谢谢。

【问题讨论】:

【参考方案1】:
int pages = ((totalRecords-1) / recordsPerPage)+1

假设 totalRecordsrecordsPerPage 是整数。如果它们是双精度数(为什么它们是双精度数?),您需要先将它们转换为整数或长整数,因为这依赖于整数除法。

将其包装在一个函数中,这样您就不必在代码库中的任何地方重复计算。只需在这样的函数中设置一次:

public int countPages(int totalRecords, int recordsPerPage) 
  return ((totalRecords-1) / recordsPerPage)+1;

如果totalRecords 可以为零,您可以轻松地在函数中为其添加特殊情况:

public int countPages(int totalRecords, int recordsPerPage) 
  if (totalRecords == 0)  return 1; 
  return ((totalRecords-1) / recordsPerPage)+1;

【讨论】:

if (totalRecords <= recordsPerPage) return 1; 不需要测试totalRecords == 0的情况,因为-1除以recordsPerPage被四舍五入到0,只要recordsPerPage大于1,通常是案子。【参考方案2】:
int pages = 1 + (totalRecords + 1) / (recordsPerPage + 1)

【讨论】:

如果totalRecords 和recordsPerPage 都相同,那将不起作用。它将输出 2 而不是正确的 1。您不应该在分子上加一,而只是在分母上。【参考方案3】:

这种方法的问题:

public int countPages(int totalRecords, int recordsPerPage)   
    if (totalRecords == 0)  return 1;   return ((totalRecords-1) / recordsPerPage)+1;

如果 totalRecords 为 1 则除以 0。需要额外的 if 语句。

这是我的重写。当 int 返回时不可能有结果时,.NET 倾向于使用 -1。所以重用这个约定。

public int countPages(int totalRecords, int recordsPerPage)
 

//insert as many paranthesies and tabs as makes you happy.
if(totalRecords == 0) return -1;
return (totalRecords % recordsPerPage) == 0? 
(totalRecords/recordsPerPage) 
: (totalRecords/recordsPerPage) + 1; 


【讨论】:

它不会导致除以 0 错误。这只有在 recordsPerPage 为 0 时才有可能。【参考方案4】:
int totalPages = (int)Math.Ceiling((double)totalRecords/recordsPerPage);

【讨论】:

我可以想象计算机决定 50/25 = 2.0000000000096 或类似的废话。

以上是关于根据 Total 和 PerPage 值确定页数的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 XSL 返回外部 PDF 文件的(总)页数

这个laravel手动分页很好用

分页总页数计算公式

怎么设置bootstrap table 中的总行数或者总页数

如何使用 SimpleXml 访问元素属性? [复制]

使变量根据返回值更新其值