js只保留整数,向上取整,四舍五入,向下取整等函数

本文介绍了JavaScript中常用的数学运算及取整方法,包括向上取整、向下取整、四舍五入等,并详细列举了Math对象的各种方法,如绝对值、对数、随机数生成等。

1.丢弃小数部分,保留整数部分
parseInt(5/2)

2.向上取整,有小数就整数部分加1

Math.ceil(5/2)

3,四舍五入.

Math.round(5/2)

4,向下取整

Math.floor(5/2)

Math 对象的方法

方法 描述
abs(x)返回数的绝对值
acos(x)返回数的反余弦值
asin(x)返回数的反正弦值
atan(x)以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值
atan2(y,x)返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)
ceil(x)对一个数进行上舍入。
cos(x)返回数的余弦
exp(x)返回 e 的指数。
floor(x)对一个数进行下舍入。
log(x)返回数的自然对数(底为e)
max(x,y)返回 x 和 y 中的最高值
min(x,y)返回 x 和 y 中的最低值
pow(x,y)返回 x 的 y 次幂
random()返回 0 ~ 1 之间的随机数
round(x)把一个数四舍五入为最接近的整数
sin(x)返回数的正弦
sqrt(x)返回数的平方根
tan(x)返回一个角的正切
toSource()代表对象的源代码
valueOf()返回一个 Math 对象的原始值
原文地址:http://www.ablanxue.com/shtml/201407/23258_1.shtml

<think>我们讨论的是JavaScript中的四舍五入取整,即按照数学规则进行四舍五入整数。 常用的方法有Math.round(),但是也要注意负数的情况(因为Math.round对于负数也是四舍五入,比如-1.5四舍五入为-1,而有些人可能会期望-2,但标准是四舍五入到绝对值更大的方向?实际上Math.round(-1.5)是-1,因为-1.5在中间值,规则是向正无穷方向舍入?但标准是四舍五入,也就是说对于负数,Math.round(-1.5)等于-1,因为-1.5距离-1更近?实际上,在数学上,四舍五入规则是:当小数部分>=0.5时,向绝对值更大的方向舍入,所以负数时,-1.5的绝对值是1.5,小数部分0.5>=0.5,所以整数部分增加1(向绝对值更大的方向),即从-1.5变成-2?但是实际上,Math.round(-1.5)是-1,这是为什么呢?因为Math.round的规则是:返回最接近该数值的整数,如果接近程度相同,则向正无穷方向舍入(即向上舍入)。所以对于-1.5,它处于-1和-2的中间,那么根据规则,它向正无穷方向舍入,也就是向0的方向,所以取-1?不对,正无穷是正方向,所以对于负数,向上舍入(向正无穷)就是朝着0的方向,所以-1.5向上舍入是-1,而向下舍入(向负无穷)是-2。 但是,我们通常说的四舍五入取整,对于负数,一般也是按照绝对值四舍五入,即-1.5应该取-2。然而,Math.round的规则并不是这样,它会将-1.5舍入为-1。因此,如果我们希望实现通常数学意义上的四舍五入(即绝对值四舍五入),我们需要特殊处理。 不过,题目要求的是“四舍五入取整”,在JavaScript中,通常使用Math.round,但我们要注意它的行为。 所以,我们分两种情况: 1. 如果只是使用Math.round,它对于正负数都是:小数部分<0.5,舍去小数;小数部分>=0.5,整数部分加1(对于负数,加1意味着向0的方向,因为负数加1是变大,比如-1.5变为-1,但-1>-2,所以实际上是向0靠近了)。因此,Math.round(-1.5)得到的是-1。 2. 如果我们想要传统的数学四舍五入(即对于负数,也是按照绝对值四舍五入,那么-1.5应该舍入为-2),我们需要自己实现。 因此,我们提供两种方案: 方案A:使用Math.round,符合IEEE标准,但对于负数中间值的处理是向正无穷方向(即负数时向0方向)。 方案B:自定义函数以实现数学意义的四舍五入(即绝对值四舍五入)。 另外,还有两个函数:Math.floor(向下取整)和Math.ceil(向上取整),这里不适用。 下面给出代码: </think>### JS实现四舍五入取整JavaScript中实现四舍五入取整有多种方法,以下是常用且可靠的实现方案: #### 1. 使用 `Math.round()` 方法 ```javascript const num1 = 3.7; const num2 = 4.2; const num3 = -2.6; console.log(Math.round(num1)); // 4 console.log(Math.round(num2)); // 4 console.log(Math.round(num3)); // -3 ``` **代码解释**: - `Math.round()` 是内置的四舍五入函数 - 对于正数:小数部分≥0.5时向上取整,<0.5时向下取整 - 对于负数:遵循相同规则但方向相反(如-2.6 → -3) - 返回整数类型(非浮点数) --- #### 2. 自定义函数处理边界情况 ```javascript function preciseRound(num) { // 处理特殊值和边界情况 if (!Number.isFinite(num)) return NaN; if (num > Number.MAX_SAFE_INTEGER) return Infinity; if (num < Number.MIN_SAFE_INTEGER) return -Infinity; return Math.round(num); } // 测试边界值 console.log(preciseRound(0.49999999999999994)); // 0(处理浮点精度问题) console.log(preciseRound(Number.MAX_SAFE_INTEGER + 0.5)); // Infinity ``` **代码解释**: - 添加特殊值处理(NaN, Infinity) - 检测超出安全整数范围的值(±9,007,199,254,740,991) - 解决浮点精度问题(如JS中 `0.1 + 0.2 = 0.30000000000000004`) --- #### 3. 使用位运算符快速取整 ```javascript function fastRound(num) { return (num + (num >> 31)) ^ (num >> 31); } console.log(fastRound(3.7)); // 4 console.log(fastRound(-2.6)); // -3 ``` **代码解释**: - `num >> 31`:获取符号位(正数为0,负数为-1) - 对于负数:`num + (-1)` 等价于 `num - 1` - 位异或 `^` 抵消符号位影响 - 性能极高(适用于大量计算) - 注意:仅适用于32位整数(范围 -2³¹ 到 2³¹-1) --- #### 4. 使用 `parseInt` 配合四舍五入(不推荐) ```javascript const roundViaParseInt = num => parseInt(num.toFixed(0)); console.log(roundViaParseInt(5.7)); // 6 console.log(roundViaParseInt(-3.4)); // -3 ``` **注意事项**: - `toFixed(0)` 返回四舍五入后的字符串 - `parseInt` 将字符串转为整数 - 缺点:性能较差(类型转换开销) - 可能丢失精度(大整数时存在问题) --- ### 关键概念解析 1. **安全整数范围**: - JavaScript安全整数范围:`Number.MIN_SAFE_INTEGER` (-9,007,199,254,740,991) 到 `Number.MAX_SAFE_INTEGER` (9,007,199,254,740,991) - 超出此范围需使用 `BigInt` 2. **浮点精度问题**: ```javascript console.log(0.1 + 0.2); // 0.30000000000000004 console.log(Math.round(0.49999999999999994)); // 1(预期为0) ``` 解决方案:使用 `Number.EPSILON` 补偿 ```javascript function safeRound(num) { return Math.round(num + Number.EPSILON); } ``` 3. **取整方向对比**: | 方法 | 3.7 | -3.7 | 3.2 | -3.2 | |-----------------|------|------|------|------| | `Math.round()` | 4 | -4 | 3 | -3 | | `Math.floor()` | 3 | -4 | 3 | -4 | | `Math.ceil()` | 4 | -3 | 4 | -3 | | `Math.trunc()` | 3 | -3 | 3 | -3 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值