JavaScript 中的四舍五入
				
									
					
					
						|  | 
							admin 2024年4月29日 11:3
								本文热度 2528 | 
					
				 
				在 JavaScript 中,对数值进行四舍五入操作的场景有以下几种:
- 向上取整:ceil 
- 向下取整:floor 
- 四舍五入:round 
- 固定精度:toFixed 
- 固定长度:toPrecision 
- 取整:trunc、parseInt、位运算 
本文将对这 6 个 API 进行简单的讲解和总结。
1、向上取整: ceil
ceil 是`天花板`的意思,表示在一个数值之上,且距离该数最近的整数。ceil 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下:
| 1 2 | Math.ceil(12.34); 
 Math.ceil(12.68); 
 | 
2、向下取整: floor
floor 是`地板`的意思,表示在一个数值之下,且距离该数最近的整数。floor 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下:
| 1 2 | Math.floor(12.34); 
 Math.floor(12.68); 
 | 
3、四舍五入: round
round 的作用是对一个浮点数进行四舍五入,并保留整数位。round 也是 Math 对象的静态方法,也需要传递一个参数,其调用方法如下:
| 1 2 | Math.round(12.34); 
 Math.round(12.54); 
 | 
4、固定精度: toFixed
toFixed 和上面三个方法不同,它是 Number 原型上实现的一个方法,其作用是对一个浮点数进行四舍五入并保留固定小数位。 toFixed 需要传递一个参数,其调用方式如下:
| 1 2 | 100.456001.toFixed(2); 
 100.456001.toFixed(3); 
 | 
5、固定长度: toPrecision
toPrecison 也是 Number 原型上实现的一个处理浮点数的方法,和 toFixed 不同的是,它是对一个浮点数进行四舍五入并保留固定长度的有效数字,包括整数部分。
| 1 2 | 99.456001.toPrecision(5);  
 100.456001.toPrecision(5); 
 | 
 6、取整: parseInt
parseInt 是 全局对象 window上的一个方法,其作用是对一个可转换的数值取整,分为以下两种情况:
1. 将字符串数值转化为 Number 整数,对字符串的每一个字符进行转化,直到遇到不可转化的字符(包括小数点)停止。
2. 对浮点类型数值取整,忽略小数部分,不做四舍五入处理
| 1 2 3 4 5 6 7 8 | 
parseInt('100') ; 
 parseInt('100axt'); 
 parseInt('100xh20'); 
 parseInt('100.78'); 
 parseInt(100.12) ; 
 parseInt(100.78); 
 | 
7、取整: 位运算
- | 0   : 和 0 进行 按位或 操作,原值不变 
- ~~   : 两次 按位非 操作得到的也是原值 
- >> 0 : 右移 0 位 
- << 0 : 左移 0 位 
- >>> 0: 无符号右移 0 位  
这些位运算符在实现取整操作时,会表现出一些共同的特征:
- 对于 Number 类型来说,直接应用位操作, 和 parseInt 得到的结果几乎一样; 
- 对于其他类型,内部会先通过 Number() 将其转换为一个数值,然后再应用位操作。 
- 对特殊 NaN 和 Infinity 值应用位操作时,这两个值都会被当成 0 来处理 。 
对于 Number 类型,直接应用位运算。
| 1 2 3 4 5 | ~~ 100.12;  
 100.78  |  0;    
 100.45 >>  0;    
 100.50 <<  0;   
 100.96 >>> 0;    
 | 
对于其他类型,先使用 Number() 转换为数值类型,再进行位运算。
| 1 2 3 4 5 6 7 8 9 10 11 12 | ~~ '100.12'
 '100.50'>> 0;  
 '100.96'<< 0;  
 ~~ 'abc'
 '12abc'>> 0;  
 undefined | 0 ; 
 ~~null;      
 true>> 0; 
 false>> 0; 
 []  << 0;     
 ~~NaN; 
 Infinity >>> 0; 
 | 
位运算作用于最基本的层次上,即按内存中表示数值的位来操作数值。
位运算能取整的原因是:
ECMAScript 中的数值以64位双精度浮点数存储,但位运算只能作用于整数,因此要先将 64 位的浮点数转换成 32 位的整数,然后再进行位运算,最后再将计算结果转换成64位浮点数存储。
 
8、取整: trunc
trunc 是 Math 对象上新增的 Api,用于去除一个数的小数部分,返回整数部分:
| 1 2 3 | Math.trunc(1.2); 
 Math.trunc(1.8); 
 Math.trunc(0.5); 
 | 
该文章在 2024/4/29 11:03:18 编辑过