js 整数处理方法Math.ceil()、 Math.floor()、 Math.round()

本文详细介绍了JavaScript中Math模块的三种整数截取方法:Math.ceil()向上取整,Math.floor()向下取整,以及Math.round()的四舍五入规则。通过具体实例,帮助读者理解并掌握这些函数的使用。

最近遇到关于js的整数截取问题,记录一下。

js内置的Math模块有三种处理规则:Math.ceil()、 Math.floor()、 Math.round()

Math.ceil() 指的是向上取整:

Math.ceil(1.2)    ## 结果为 2

Math.ceil(1.5)    ## 结果也为 2

Math.ceil(1.8)    ## 结果也为 2

## 总而言之, 超过整数 n, 结果即为 n + 1

Math.floor()指的是向上取整:

Math.floor(1.2)    ## 结果为 1

Math.floor(1.5)    ## 结果也为 1

Math.floor(1.8)    ## 结果也为 1

## 总而言之, 只要没超过整数 n, 结果即为 n - 1

Math.round() 则遵循我们日常使用的 '四舍五入'规则:

Math.round(1.2)    ## 结果为 1

Math.round(1.5)    ## 结果也为 2

Math.round(1.8)    ## 结果也为 2

## 四舍五入

 

 

 

 

 

 

 

 

 

<think> 我们正在讨论Math.floor()Math.ceil()的区别。根据引用[1]和引用[2]的内容,我们可以清晰地解释这两种方法的区别。 引用[1]中给出了几个示例: console.log(Math.ceil(4.7)); // 5 console.log(Math.floor(4.7)); // 4 console.log(Math.ceil(-4.7)); // -4 console.log(Math.floor(-4.7)); // -5 引用[2]详细说明了: Math.floor(x) 向下取整(地板函数): 返回小于或等于x的最大整数Math.ceil(x) 向上取整(天花板函数): 返回大于或等于x的最小整数。 因此,我们可以这样总结: - Math.floor(): 向下取整,即往数轴负方向取整(对于正数,去掉小数部分;对于负数,则向下取整到更小的整数)。 - Math.ceil(): 向上取整,即往数轴正方向取整(对于正数,如果有小数则进一位;对于负数,则去掉小数部分,但注意负数的小数部分去掉后实际上是变大了,因为负数绝对值变小了)。 另外,引用[3]提到Math.round()是四舍五入,但我们这里只关注floorceil。 我们可以用数学表达式来描述: - Math.floor(x) = $\lfloor x \rfloor$ = 最大的整数n,满足$n \leq x$。 - Math.ceil(x) = $\lceil x \rceil$ = 最小的整数n,满足$n \geq x$。 下面我们通过一些例子来说明: 正数例子: - x = 4.7: Math.floor(4.7) = 4, 因为4是小于等于4.7的最大整数Math.ceil(4.7) = 5, 因为5是大于等于4.7的最小整数。 负数例子: - x = -4.7: Math.floor(-4.7) = -5, 因为-5小于-4.7,且-5是小于等于-4.7的最大整数(注意:-5比-4.7小,但在数轴上更靠左,即更小)。 Math.ceil(-4.7) = -4, 因为-4大于-4.7,且-4是大于等于-4.7的最小整数(注意:-4比-4.7大)。 特殊值处理: - 如果x是整数,则Math.floor(x)Math.ceil(x)都等于x本身。 - 如果x是NaN,则返回NaN。 - 如果x是Infinity或-Infinity,则返回相应的无穷大。 根据引用[2]中的示例,我们还可以看到: Math.floor(4.9); // 4 Math.floor(-4.1); // -5 Math.ceil(4.1); // 5 Math.ceil(-4.9); // -4 因此,我们可以总结出: - 对于正数,floor是直接去掉小数部分(截断),ceil则是如果小数部分不为0则整数部分加1。 - 对于负数,floor则是整数部分减1(如果小数部分不为0),ceil则是直接去掉小数部分。 注意:在JavaScript中,Math.floor()Math.ceil()都是Math对象的静态方法,因此直接调用。 最后,我们给出一个对比表格: | 方法 | 描述 | 示例(正数) | 示例(负数) | |---------------|----------------------|--------------|--------------| | `Math.floor(x)` | 向下取整(地板函数) | `Math.floor(4.7) = 4` | `Math.floor(-4.7) = -5` | | `Math.ceil(x)` | 向上取整(天花板函数) | `Math.ceil(4.7) = 5` | `Math.ceil(-4.7) = -4` | 注意:在负数情况下,向下取整会得到更小的数(更负),向上取整会得到更大的数(向零靠近)。 根据引用[2]和引用[3]的内容,我们还应注意到Math.round()与这两个函数的不同,但用户问题只问floorceil,所以我们不展开。 最后,生成相关问题: </think> ### JavaScript中`Math.floor()`与`Math.ceil()`的区别 #### 1. **定义与数学原理** - **`Math.floor(x)`(地板函数)** 返回 $\leq x$ 的最大整数(向负无穷方向取整): $$\text{Math.floor}(x) = \lfloor x \rfloor = \max\{ n \in \mathbb{Z} \mid n \leq x \}$$ 示例: $$\lfloor 4.7 \rfloor=4, \quad \lfloor -4.7 \rfloor=-5$$[^1][^2] - **`Math.ceil(x)`(天花板函数)** 返回 $\geq x$ 的最小整数(向正无穷方向取整): $$\text{Math.ceil}(x) = \lceil x \rceil = \min\{ n \in \mathbb{Z} \mid n \geq x \}$$ 示例: $$\lceil 4.7 \rceil=5, \quad \lceil -4.7 \rceil=-4$$[^1][^2] #### 2. **行为对比表** | 输入值 | `Math.floor(x)` | `Math.ceil(x)` | 说明 | |--------------|-----------------|----------------|--------------------------| | **正数** | | | | | $x=4.7$ | $4$ | $5$ | 地板向下,天花板向上 | | $x=2.1$ | $2$ | $3$ | | | **负数** | | | | | $x=-4.7$ | $-5$ | $-4$ | 负数取整方向相反 | | $x=-3.2$ | $-4$ | $-3$ | | | **整数** | | | | | $x=5$ | $5$ | $5$ | 整数结果相同 | | $x=-2$ | $-2$ | $-2$ | | | **特殊值** | | | | | $x=\text{NaN}$ | $\text{NaN}$ | $\text{NaN}$ | 非数字返回NaN | | $x=\infty$ | $\infty$ | $\infty$ | 无穷大保持不变 | #### 3. **核心区别总结** 1. **取整方向**: - `floor` 始终向更小的整数方向取整(数轴左侧)。 - `ceil` 始终向更大的整数方向取整(数轴右侧)。 2. **负数处理**: - 对负数:`floor` 结果更小(如 $-4.7 \to -5$),`ceil` 结果更大(如 $-4.7 \to -4$)[^3]。 3. **数学性质**: - 恒等式:$\lfloor x \rfloor = -\lceil -x \rceil$(如 $x=-4.7$ 时,$\lfloor -4.7 \rfloor = -5 = -\lceil 4.7 \rceil$)。 #### 4. **示例代码验证** ```javascript // 正数场景 console.log(Math.floor(4.7)); // 4 console.log(Math.ceil(4.7)); // 5 // 负数场景 console.log(Math.floor(-4.7)); // -5 console.log(Math.ceil(-4.7)); // -4 // 边界值 console.log(Math.floor(0)); // 0 console.log(Math.ceil(0)); // 0 console.log(Math.floor(NaN)); // NaN ``` #### 5. **应用场景** - **`Math.floor()`**:向下取整需求 - 分页计算(总页数 = $\lceil \text{总条数} / \text{每页大小} \rceil$) - 数组索引计算(避免越界)。 - **`Math.ceil()`**:向上取整需求 - 资源分配(如计算需要多少辆卡车运货:$\lceil \text{总货物} / \text{卡车容量} \rceil$)。 - 时间向上取整(如通话计费按分钟向上取整)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值