如何在 JavaScript 中利用 Math.ceil() 和 Math.floor() 执行向上向下取整
在 Ja vaScript 里处理数字取整,Math.ceil() 和 Math.floor() 是一对很容易混淆但又极其常用的方法。先给你个最直观的印象:Math.ceil() 向上取整,返回大于或等于原数的最小整数,比如 Math.ceil(-2.9) 的结果是 -2;Math.floor()
在 Ja vaScript 里处理数字取整,Math.ceil() 和 Math.floor() 是一对很容易混淆但又极其常用的方法。先给你个最直观的印象:Math.ceil() 向上取整,返回大于或等于原数的最小整数,比如 Math.ceil(-2.9) 的结果是 -2;Math.floor() 向下取整,返回小于或等于原数的最大整数,比如 Math.floor(-1.2) 的结果是 -2。两者都不改变原值,只是返回一个新的整数。

简单来说,Math.ceil() 就是“只要有小尾巴就往大里走”,而 Math.floor() 则是“不管尾巴多大都直接扔掉,只留整数部分”——当然这只适用于正数。一旦遇到负数,逻辑就得跟着数轴方向来理解。下面展开细说。
向上取整:Math.ceil()
这个方法的特点是:无论小数部分多小,哪怕只有 0.0001,也会往下一个整数进位。对于负数来说,“向上”指的是朝向数轴右侧、更接近零的方向。
Math.ceil(3.1)→ 4Math.ceil(7)→ 7(整数不变)Math.ceil(-2.9)→ -2(因为 -2 是大于 -2.9 的最小整数)Math.ceil(-5)→ -5
向下取整:Math.floor()
这个方法直接舍去小数部分,向负无穷方向取整。负数时结果会比原数更小(也就是更远离零)。
Math.floor(4.9)→ 4Math.floor(0.1)→ 0Math.floor(-1.2)→ -2(因为 -2 小于 -1.2,是小于等于 -1.2 的最大整数)Math.floor(-8)→ -8
常见使用场景与技巧
这两个方法在分页计算、栅格布局、数组分块等需要整数边界控制的场合特别常用。举几个例子:
- 分页总页数:
Math.ceil(总条数 / 每页条数)。比如 25 条数据、每页 10 条,Math.ceil(25/10)得到 3 页。 - 获取第 n 个元素所在页码(从 1 开始):
Math.floor((n - 1) / 每页条数) + 1。 - 避免浮点误差:直接对浮点数运算后再取整可能出错,比如
Math.floor(0.1 + 0.2)返回0(因为 0.1+0.2 在 IEEE 754 下等于 0.30000000000000004)。稳妥做法是先用Number.toFixed()或乘除法归一化,例如Math.floor((0.1 + 0.2) * 10) / 10先得到 0.3 再处理。
注意边界与兼容性
这两个方法都接受字符串形式的数字(会隐式转换),但遇到无法转为有效数字时返回 NaN。下面是一些边界情况:
Math.ceil("3.7")→ 4(虽然能工作,但不建议依赖隐式转换)Math.floor("hello")→ NaNMath.ceil(null)→ 0(因为Number(null)等于 0)
建议在调用之前先校验输入:typeof x === 'number' && !isNaN(x),这样能避免很多隐性 bug。


































