国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你不知道的取數值整數部分的冷知識

calx / 2767人閱讀

摘要:我們可以用測一下具體實現原理,請參考文檔注意因為操作將操作數轉為,所以它不能處理超過位的數值取整,而有效整數的范圍是位。綜上所以如果要考慮壓縮代碼的大小,且明確知道數值范圍不會超過位整數的時候,可以考慮使用取整。

在處理數值的時候,獲取浮點數的整數和小數部分,是一種常見的操作,在JavaScript中有許多方法可以達到目的,但也正因為方法眾多,所以哪種方法更好,也值得我們仔細研究一番。

1. parseInt
let num = 3.75;
console.log(parseInt(num)); // 3
num = -3.75;
console.log(parseInt(num)); // -3

parseInt(3.75),會先將3.75轉換成字符串"3.75", 然后在轉換成3.
這個方法是一個將字符串轉換為整數的方法,如果參數不是一個字符串,則將其轉換成字符串,性能開銷大。
關鍵還有一個致命的問題:

console.log(parseInt(0.00000001));  // 1
console.log(parseInt(1000000000000000000000)); // 1

分析:
這是因為toString(),0.00000001.toString()===1e-8而1000000000000000000000..toString() === 1e+21。

2. Math.ceil + Math.floor Math.ceil() 向上取整 Math.floor() 向上取整
function trunc (num) {
    if (num>=0) {
        return Math.floor(num)
    } else {
        return Math.ceil(num)
    }
}
console.log(trunc(3.75));  // 3
console.log(trunc(-3.75)); // -3

使用Math.round和Math.ceil實現trunc方法,要比使用parseInt的性能好,因為省去了轉字符串。我們可以用jsperf測一下:

3. Math.trunc()
console.log(Math.trunc(3.75));    // 3
console.log(Math.trunc(-3.75));   // -3
4. |

具體實現原理,請參考 ECMA-262文檔

log(3.75 | 0);    // 3
console.log(-3.75 | 0);   // -3

注意:
因為bitwise操作將操作數轉為Int32,所以它不能處理超過32位的數值取整,而JavaScript有效整數的范圍是53位。

const num = 17179869184.89;
console.log(num | 0); // 0
console.log(Math.trunc(num)); // 17179869184

綜上: 所以如果要考慮壓縮代碼的大小,且明確知道數值范圍不會超過32位整數的時候,可以考慮使用 | 0取整。否則,還是使用Math方法吧。

附: 性能測試 https://jsperf.com

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106304.html

相關文章

  • Python 基礎篇 - Python入門

    摘要:除此之外的特定形式還有二進制序列類型,那么我們在這里所說的序列主要包含以下三種列表列表是一種可變序列,一般形式為,方括號內的各項間用逗號分隔。 引言 對于以前沒有接觸過任何編程語言的人來說,首先能明確編程的目的很重要,往往能明確一個目的,在日后的學習中遇到困難時心態就會輕松許多。當今計算機文化的多元化發展,涌現出了大數據、分布式計算、神經網絡、機器學習等眾多新概念,即便這樣,任何意義上...

    VioletJack 評論0 收藏0
  • 你不知道的按位運算

    摘要:相信大家都知道二進制數按位運算的規則來看一些簡單的例子單純的二進制位之間的這些運算相當簡單,但對我們實際編程并沒有直接幫助,因為編程過程中需要的經常是數字間的運算,比如。 先來看LeetCode上的Divide Two Integers題目要求: Divide two integers without using multiplication, division and mod ope...

    luoyibu 評論0 收藏0
  • Python數值處理(一)

    摘要:取整使用函數可以輕松的對浮點數進行取整操作。這是因為函數在應對這種與兩個整數距離相同的情況時,會取到最近的偶數上去。如果你特別需要精確的數值,那么可以使用模塊。 round()取整 使用round()函數可以輕松的對浮點數進行取整操作。示例如下: >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-0.36, 1) -0.4...

    isaced 評論0 收藏0
  • js數據結構-散列表(哈希表)

    摘要:散列表散列表,也叫哈希表,是根據鍵而直接訪問在內存存儲位置的數據結構。這個映射函數稱做散列函數,存放記錄的數組稱做散列表。 散列表 散列表(Hash table,也叫哈希表),是根據鍵(Key)而直接訪問在內存存儲位置的數據結構。也就是說,它通過計算一個關于鍵值的函數,將所需查詢的數據映射到表中一個位置來訪問記錄,這加快了查找速度。這個映射函數稱做散列函數,存放記錄的數組稱做散列表。 ...

    call_me_R 評論0 收藏0
  • Java和Python中的整數除法,取余,舍入

    摘要:整數除法對兩個不能整除的整數做除法,就要面對舍入的問題。中的舍入除了缺省的舍入方式,還有多種舍入可供選擇。就是說,我們輸入的十進制數,在計算機內部都是用二進制來表示的。 關于除法,你也許覺得沒什么值得談論的,畢竟小學的時候體育老師就教過我們了。然而對于編程中使用的除法,我覺得還是有很多值得注意的細節的。為什么我想深究一下?因為我日常主要使用Java和Python編程,而它們的除法在細節...

    hosition 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<