首页 > 代码库 > javascript中小数转换为整数
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或的方式更快,推荐大家使用:)
附上测试连接 http://jsperf.com/truncating-decimals
不过还是要提醒一下大家,第一种和第二种方式对操作数的范围有要求(因为是转换成32位整数),所以如果值本身超过了32位整数所能表示的范围,那么将会因为信息丢失而出现错误的结果。比如2147483648 | 0 的结果是-2147483648 。~~4294967296的结果是0。32位带符号整数最大是2147483647,所以这种方法要求小数的整数部分在-2147483648 到 2147483647之间。
javascript中小数转换为整数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。