内容由DeepSeek生成。
公式解析
totalPages := (total + pageSize - 1) / pageSize
核心目标
计算总数据量total
按每页大小pageSize
分页后的总页数,需处理以下两种情况:- 整除:例如
total=10, pageSize=5
,总页数为2
。 - 不整除:例如
total=11, pageSize=5
,总页数为3
(余数需另起一页)。
- 整除:例如
公式原理
- 分母:
pageSize
是每页的大小。 - 分子:
total + pageSize - 1
是关键技巧,作用是将余数部分“进位”。- 如果
total
能被pageSize
整除,total + pageSize - 1
会多出一个pageSize-1
,但后续除法会抵消这个值。 - 如果
total
不能被整除,余数会被放大到至少pageSize
,从而触发整数除法自动进位。
- 如果
- 分母:
数学等价性
\[ \text{totalPages} = \left\lceil \frac{\text{total}}{\text{pageSize}} \right\rceil \]
公式等价于向上取整运算:但避免了浮点运算,仅用整数运算实现。
举例验证
整除情况
total=10, pageSize=5
\[ (10 + 5 - 1) / 5 = 14 / 5 = 2.8 \quad \text{(整数除法结果为 2)} \]- 正确总页数为
2
。
不整除情况
total=11, pageSize=5
\[ (11 + 5 - 1) / 5 = 15 / 5 = 3 \]- 正确总页数为
3
。
边界情况
total=0
(无数据时):
\[ (0 + 5 - 1) / 5 = 4 / 5 = 0 \] 总页数为0
,符合逻辑。total=1, pageSize=100
(极少量数据):
\[ (1 + 100 - 1) / 100 = 100 / 100 = 1 \] 正确总页数为1
。
为何不使用 math.Ceil
?
- 性能:浮点运算(如
math.Ceil
)通常比整数运算慢。 - 简洁性:无需引入条件判断或类型转换。
- 兼容性:所有编程语言均支持整数除法,但浮点运算可能存在精度问题。
总结
此公式通过 total + pageSize - 1
巧妙地将余数进位,再利用整数除法特性实现向上取整,最终高效、准确地计算出总页数。适用于任何需要分页的场景,且无需依赖额外函数或复杂逻辑。
说些什么吧!