javascript - js中向下取整
PHP中文网
PHP中文网 2017-06-26 10:55:11
0
5
915

在js中,以前向下取整都是使用Math.floor方法,現在有看到這樣的用法:或運算
interval = interval | 0
為什麼這樣就可以向下取整了,這種用法和Math.floor比較,有什麼好處?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(5)
某草草

注意,| 不是邏輯或,而是按位或 (OR)。

一些小差別。例如 Math.floor(NaN) 還是回 NaN。但 NaN | 0 回傳 0。
再例如 Math.floor(Infinity) 回傳 Infinity,但​​ Infinity | 0 回傳 0

过去多啦不再A梦

你還可以這樣 interval = interval >> 0

给我你的怀抱
  • 首先樓上S1ngS1ng說那些小差別是對的。

  • 另外,|是位或運算,由於0在內存中存儲的時候,是所有的整數位全部被填充了0,所以按二進制位和一個數值進行或運算,對應位上無論是0還是10進行或運算,都會得到它本身,但是由於數字0在內存中不存在小數部分,所以位或運算之後interval的小數部分被丟棄。其實是丟棄小數部分實現了向下取整。

  • 由於是位元運算,所以會比Math.floor()快。

三叔

真實的原因是:js內部的型別自動轉換。

js的數值都是以64位元浮點型表示的。當一個數值需要進行位元運算時,js會自動將它轉換為32位元有符號整形,並捨棄小數部分。

n|0 ; n>>0 ; //後面的0 僅用來確保n的整數值不變而已。

從64位降到32位,是會有精度損失的。 小心! ,最大有效範圍: 2^32/2-1

> f64=(Math.pow( 2,32)/2-1)-0.5
2147483646.5
> f64|0
2147483646
> f64>>0
2147483646
> (f64 + 2)|0 //超出有效范围
-2147483648
> (f64 + 2)>>0 //超出有效范围
-2147483648
> Math.floor(f64 + 2) //正确
2147483648
给我你的怀抱

兩種都可以實現, interval = interval | 0 這個是一個寫作的技巧,看個人愛好吧。可能就是interval = interval | 0這種寫法運行會快一點,寫程式碼這個也肯定比Math.floor寫得快!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!