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

本文介绍JavaScript中常见的数学运算方法,包括不同类型的取整操作,并提供了实用的代码案例。学习如何使用Math对象来进行向上取整、向下取整、四舍五入等操作。

1.丢弃小数部分,保留整数部分
parseInt(5/2)
2.向上取整,有小数就整数部分加1
Math.ceil(5/2)
3,四舍五入.
Math.round(5/2)
4,向下取整
Math.floor(5/2)
Math 对象的方法
FF: Firefox, N: Netscape, IE: Internet Explorer
方法 描述 FF N IE
abs(x) 返回数的绝对值 1 2 3
acos(x) 返回数的反余弦值 1 2 3
asin(x) 返回数的反正弦值 1 2 3
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值 1 2 3
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间) 1 2 3
ceil(x) 对一个数进行上舍入。 1 2 3
cos(x) 返回数的余弦 1 2 3
exp(x) 返回 e 的指数。 1 2 3
floor(x) 对一个数进行下舍入。 1 2 3
log(x) 返回数的自然对数(底为e) 1 2 3
max(x,y) 返回 x 和 y 中的最高值 1 2 3
min(x,y) 返回 x 和 y 中的最低值 1 2 3
pow(x,y) 返回 x 的 y 次幂 1 2 3
random() 返回 0 ~ 1 之间的随机数 1 2 3
round(x) 把一个数四舍五入为最接近的整数 1 2 3
sin(x) 返回数的正弦 1 2 3
sqrt(x) 返回数的平方根 1 2 3
tan(x) 返回一个角的正切 1 2 3
toSource() 代表对象的源代码 1 4 -
valueOf() 返回一个 Math 对象的原始值

代码案例:

<script type="text/javascript">
//取整
function getResult(num){
return parseInt(num);
}
//四舍五入到num后面的n位
function getResult(num,n){
return Math.round(num*Math.pow(10,n))/Math.pow(10,n);
}
//截取n位
function getresult(num,n){
return num.toString().replace(new RegExp("^(\\-?\\d*\\.?\\d{0,"+n+"})(\\d*)$"),"$1")+0;
}
</script>

其他:

var mLength = textMn.length; 
 var mFirst = parseInt(mLength/60); 
 //取整 
 //alert(mLength); 
 var mLast = mLength; //取余 
 if(mLast>0){ 
 $(".mood_content").height((mFirst+1)*20);
 }
<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、付费专栏及课程。

余额充值