1.取整数
1.parseInt
let num = 3.75;
console.log(parseInt(num)); // 3
num = -3.75;
console.log(parseInt(num)); // -3
用parseInt取整数,结果是没问题的,但是如果严格来说,其实parseInt并不是设计用来取整数的。
👉🏻 知识点:
parseInt(string, radix)``
这个方法是一个将字符串转换为整数的方法,它有两个参数,第一个参数表示要转换的字符串,如果参数不是一个字符串,则将其转换为字符串。第二个参数是基数即进制,默认为10。
所以用 parseInt 方法取整数,有两个不好的地方,一是 parseInt 这个函数名,看起来就是将字符串转整数的,用在这里不是很适合,另一个是转字符串有点多此一举,而且肯定会带来性能开销,所以使用 parseInt 虽然方便,但不是最好的办法。
2.Math方法
其中 Math.round 是四舍五入的,Math.ceil 是向上取整,Math.floor 是向下取整。
function trunc(num){
if(num >= 0) return Math.floor(num) //如果小于0 向上取整
return Math.ceil(num) //向下取整
}
3.位操作
使用位操作方法,在运算过程中会把操作数转为成32位整数,如此,运算后的结果就是整数部分了
let num = 3.75;
console.log(num | 0); // 3
num = -num;
console.log(num | 0); // -3
但是这样做也有缺陷
👉🏻 冷知识:因为bitwise操作将操作数转为Int32,所以它不能处理超过32位的数值取整,而JavaScript有效整数的范围是53位。
当数值范围超过32位时,它将不能对数值取整,而JavaScript有效整数的范围是53位。
那么用“|”有什么好处呢?如果考虑js文件大小,那么a|0与其他方式比较,是最短的方式,所以如果要考虑压缩代码的大小,且明确知道数值范围不会超过32位整数的时候,可以考虑使用这个技巧。
2.取小数
1.parseInt+split
将数值转换成2字符串后切割并转换回数值
const num = 12.76
const integer = parseInt(num.toString().split('.')[0])
const decimal = parseInt(num.toString().split('.')[1])//取小数
console.log(`${integer}.${decimal}`);
2.Math.trunc()
先用Math.trunc(num)
取整,然后再与原数相减,就得到了小数部分。
function fract(num) {
return num - Math.trunc(num);
}
console.log(fract(3.75)); // 0.75
console.log(fract(-3.75)); // -0.75
3.取模运算
👉🏻 知识点: JavaScript的取模运算%并不限于整数运算,可以对浮点数取模。
所以,直接将原数对1取模,即可获得小数部分!
console.log(3.75 % 1); // 0.75
console.log(-3.75 % 1); // -0.75