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之間。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM