Math.floor(),Math.ceil(),Math.round()三个函数的区别

本文详细介绍了JavaScript中的三种常用数学函数:Math.floor()向下取整、Math.ceil()向上取整及Math.round()四舍五入,并通过具体例子展示了这些函数的使用方法。

1.Math.floor()

英文含义为:地板,所以是向下取整,方便记忆叫它地板函数。会取不大于自变量的最大整数,这样自变量是3.1或3.9是没有区别的,返回都是3;自变量是-2.1或-2.9也是没有区别的,返回都是-3;例如:

Math.floor(11.46)=Math.floor(11.68)=Math.floor(11.5)=11
Math.floor(-11.46)=Math.floor(-11.68)=Math.floor(-11.5)=-12

2.Math.ceil()

英文含义为:天花板,所以是向上取整,它就是天花板函数会取不小于自变量的最大整数,这样自变量是3.1或3.9,返回都是4;自变量是-2.1或-2.9,返回的都是-2;例如:

Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=12
Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-11

3.Math.round()

英文含义为:周围,环绕,这个就是常用的四舍五入函数。因为它会返回离自变量最近的整数,这个返回的整数可能大于也可能小于原来的数,但是一定是离它最近的那个整数,比如12.5返回13,12.4返回12。例如:

小数点后第一位<5
正数:Math.round(11.46)=11
负数:Math.round(-11.46)=-11
 
小数点后第一位>5
正数:Math.round(11.68)=12
负数:Math.round(-11.68)=-12
 
小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-11
总结:以上逻辑即俗称的“四舍五入”

本文借鉴了以下2篇博文,感谢2位原作者:

https://blog.youkuaiyun.com/sugarbliss/article/details/79861133

https://www.cnblogs.com/johnsonwei/p/6101171.html

<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$)。 - 时间向上取整(如通话计费按分钟向上取整)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值