JS面试题-如何优雅的获取浮点数的整数和小数部分

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值