分頁時,根據頁面大小(pageSize)和總行數(total),計算總頁面數(totalPage)
一:總行數取余頁面大小,等于0,則頁數為整頁數,否則有余數,則頁數為正頁數加一
// 總行數取余頁面大小,等于0,則頁數為整頁數,否則有余數,則頁數為正頁數加一const totalPage = (total % pageSize == 0) ? (total / pageSize) : (total / pageSize + 1)
二:總頁數=(總數-1)/每頁數量+1
// 總頁數 =(總數 - 1)/ 每頁數量 + 1
const totalPage = (total - 1) / pageSize + 1
三:總頁數=(總數 + 每頁數量 - 1)/ 每頁數量?
// ?總頁數=(總數+每頁數量-1)/每頁數量
const totalPage = (total + pageSize - 1) / pageSize
簡述一下第三個是如何證明的:
1. 特殊情況total = 0時,為0頁
2. total大于等于一頁時:
????????2.1 整除的情況下:total / pageSize 滿足
????????2.2 有余數的情況下,就多加一頁: total / pageSize + 1 等價于 (total + pageSize) / pageSize
3. total小于頁面大小時,為1頁
????????3.1 當total = 1時,total需要再加上整數x,才夠一頁,即(total + x) / pageSize,x ∈ [pageSize - 1, 2(pageSize - 1)]
????????3.2 當total = pageSize - 1時,total需要再加上整數x,才夠一頁,即(total + x) / pageSize,x ∈ [1, pageSize]
為了滿足情況3.1、3.2,二者取交集,所以total需要加上整數 x ∈ [pageSize - 1, pageSize]
如果x取pageSize,會影響情況2.1造成頁數多一頁,不會影響情況2.2,故舍去
又因為pageSize - 1為 total 除以 pageSize 的最大余數,對total大于等于一頁的兩種情況均不影響,所以x應取pageSize - 1
所以綜上所述:總頁數totalPage = (total + pageSize - 1) / pageSize,代入total=0時,為0頁,滿足,證明完畢!
total / pageSize + 1等價于(total + pageSize) / pageSize: 取整(/ 二元操作符)是一個整體和另一個整體進行運算,不可化簡,此處等價于有前提條件。
(total + pageSize - 1) / pageSize 不可化簡成 (total - 1) / pageSize + 1,因為此處是取整,不是除法。
四:使用Math.ceil()函數,進1法取整。Math.ceil(total / pageSize)
// 使用Math.ceil()函數,進1法取整
const totalPage = Math.ceil(total / pageSize)
Math.Ceiling(0.0) //0
Math.Ceiling(0.1) //1
Math.Ceiling(0.5) //1
Math.Ceiling(0.6) //1
Math.Ceiling(0.7) //1
Math.Ceiling(1.01) //2
引用:
【數據結構與算法】分頁時,根據頁面大小和總行數,計算總頁面數(含推理過程)_分頁查詢計算總頁數_debug4flaw的博客-CSDN博客
分頁計算總頁數算法:總頁數=(總數-1)/每頁數量+1----總頁數=(總數+每頁數量-1)/每頁數量_總頁數怎么算-CSDN博客