javascript中小数转换为整数

还是去年的时候有同事随口问我在javascript中怎么把小数转换成整数(去掉小数位),当时我回答直接用parseInt。其实那时候也没有仔细考虑这个问题还有没有其他的方法。不过最近在看别人一篇博文里的代码时,发现他这么写代码

var random = (Math.random() * 2) | 0; // get random 0 or 1
我们都知道javascript的Number其实就是双精度浮点数,而Math.random() * 2 很明显随即出来的是[0 ~ 2)之间的小数,他通过与0或的方式,把小数部分去掉了,cool!
 
这种方式的原理就是利用javascript做位运算时(bitwise operation)会先把操作数通过无符号右移的方式变为32位整数,而与0进行按位或显然不会改变整数的值,所以可以通过这样的方式把小数转化成整数,去掉小数部分。所以我们应该能猜到 (true | 0)会得到1, “123”|0会得到123。同理,也可以通过 & 4294967295的方式来达到同样的目的。
 
其实还有好几种简单方法可以去掉小数部分把小数转化成整数,下面列出来
 
第二种:两次取反,同样是利用位操作转换原理。
var integer = ~~decimal; // 4 = ~~4.123
第三种:利用向上取整数与向下取整数的数学函数, Math.ceil和Math.floor
var integer = decimal >= 0 ? Math.floor(decimal) : Math.ceil(decimal);
当然还有更复杂的方式,不过经过Robert Koritnik测试,还是与0或的方式更快,推荐大家使用:)
 
不过还是要提醒一下大家,第一种和第二种方式对操作数的范围有要求(因为是转换成32位整数),所以如果值本身超过了32位整数所能表示的范围,那么将会因为信息丢失而出现错误的结果。比如2147483648 | 0 的结果是-2147483648 。~~4294967296的结果是0。32位带符号整数最大是2147483647,所以这种方法要求小数的整数部分在-2147483648 到 2147483647之间。
 

转载于:https://www.cnblogs.com/chrissitang/p/3938289.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值