在 JavaScript 中將浮點數轉換為整數

Nithin Krishnan 2023年1月30日
  1. 使用 JavaScript 中的 parseInt() 函式將浮點數轉換為整數
  2. 在 JavaScript 中使用 Number.toFixed() 將浮點數轉換為整數
  3. 使用 JavaScript 中的按位運算子將浮點數轉換為整數
  4. 使用 Java 中的 Math 庫函式將浮點數轉換為整數
  5. 總結
在 JavaScript 中將浮點數轉換為整數

在 JavaScript 中,我們有多種將 float 轉換為 int 的方法,如下所示。

  • parseInt() 函式
  • Number.toFixed() 方法
  • 用按位運算子轉換
    • 與 0 進行邏輯或
    • 使用雙 NOT 運算子
    • 右移 0 位
  • 在 JavaScript 中使用 Math 庫函式
    • Math.floor()
    • Math.round()
    • Math.ceil()
    • Math.trunc()

使用 JavaScript 中的 parseInt() 函式將浮點數轉換為整數

parseInt() 在 JavaScript 中被廣泛使用。通過這個函式,我們可以將不同資料型別的值轉換為整數型別。在本節中,我們將看到浮點數到整數的轉換。parseInt() 的語法是 parseInt(<value>)。以下程式碼顯示了該函式的行為。

console.log(parseInt(123.321));
console.log(parseInt(123.998));

輸出:

123
123

備註

  • 有關更多資訊,請參閱 MSN 文件
  • 在轉換浮點數時,parseInt() 丟棄小數,並且在返回浮點值的整數部分時不考慮它們。
  • 如果無法進行轉換,則 parseInt() 將返回 NaN。因此,最好在轉換值時包含 isNaN() 檢查,以便程式碼安全且不會中斷。

在 JavaScript 中使用 Number.toFixed() 將浮點數轉換為整數

Number.toFixed() 的行為與 parseInt() 略有不同。將數字四捨五入到最接近的整數值。因此,請注意四捨五入的事實。Number.toFixed()將小於.5 的 float 的十進位制值四捨五入到較低的整數值。如果十進位制值為 0.5 或更大,則浮點數將四捨五入為下一個更高的整數值。Number.toFixed()函式的語法如下。

numberObject.toFixed(<number of digits>);

通常,我們需要向此函式傳遞一個引數,該引數指定輸出中小數點後的位數。出於我們的目的,我們無需提及任何引數,因為預設情況下,它將引數設為 0,因此返回整數值。請參考以下示例程式碼。

console.log( (123.123).toFixed(2) );
console.log( (123.123).toFixed() );
console.log( (123.98).toFixed() );
console.log( (123.49).toFixed() );
console.log( (123.5).toFixed() );

輸出:

123.12
123
124
123
124

備註

  • parseInt() 方法不同,Number.toFixed() 在提取整數部分方面並不出名,因為它對作為引數傳遞的浮點數值進行了四捨五入。
  • 可以使用此函式僅轉換浮點值。與 parseInt() 函式不同,Number.toFixed() 不支援將字串值轉換為浮點數。

使用 JavaScript 中的按位運算子將浮點數轉換為整數

我們已經看到了 parseInt()Number.toFixed() 的方法。兩者都執行一些內部操作以獲得所需的結果。與這兩種方法相比,按位運算子可高效,快速且高效地將浮點值轉換為整數。我們可以使用以下按位運算子進行轉換。

與 0 進行邏輯或運算

我們可以使用按位 OR 運算子來獲取浮點數的整數部分。按位運算子在二進位制層面上發揮作用。它將運算元轉換為二進位制,然後逐位執行運算。對可接受範圍內的任何浮點數與 0 進行邏輯或運算,將返回浮點值的整數部分。請參考以下示例。

console.log(123.321 | 0);
console.log(123.5432 | 0);
console.log(123.921 | 0);
console.log(216 | 0);
console.log(-321.456 | 0)

輸出:

123
123
123
216
-321

使用雙 NOT 運算子

另一個按位運算子是 NOT 運算子,由~符號表示。作為一元運算子,我們可以使用按位 NOT 運算子去除浮點數中的小數部分。二進位制級別的 NOT 運算子反轉二進位制位的值(對於 1 位,返回 0,對於 0 位,返回 1)。這意味著,如果一個數字用 10110 表示為二進位制,則對其應用 NOT 將得到相反的值 01001。再次應用 NOT 操作將返回數字的原始位(10110)。因此,兩次使用 NOT 運算子將返回數字值,並且在此過程中,如果它是整數,則不會更改數字。但是對於浮點值,兩次使用 NOT 運算子將只返回浮點數的整數部分。以下示例闡明瞭這一事實。

console.log(~~(123.321));
console.log(~~(123.53));
console.log(~~(23.97));
console.log(~~(-23.97));
console.log(~~(-0.97));

輸出:

123
123
23
-23
0

右移 0 位

我們可以應用按位右移運算子(用 >> 字元表示)。它將浮點數值轉換為整數。在二進位制級別下,按位向右移運算子將運算元的二進位制位向右移動第二個運算元指定的計數。因此,它忽略了向右溢位的位。這樣,該函式將保留數字的符號值。以下程式碼代表正確的 SHIFT 運算子的工作方式。

console.log(123.321 >> 0);
console.log(123.53 >> 0);
console.log(23.97 >> 0);
console.log(-23.97 >> 0);
console.log(-0.97 >> 0);

輸出:

123
123
23
-23
0

備註

  • 按位運算子速度更快,因為它最接近於機器語言,並且不需要像 parseInt()Number.toFixed() 在內部完成的那樣執行其他檢查或操作。
  • 如果對大量運算子使用按位運算子,例如 ORNOT 等,可能會產生意外的結果。截斷十進位制值所支援的最大值是 2147483647(231-1)。大於 2147483647 的任何數字都將產生意外的結果。
  • 在 JavaScript 中,浮點數由 64 位表示,保留一位用於保留符號值(正或負),整數部分為 32 位。按位運算子對帶符號的 32 位數字進行運算,而忽略十進位制值。因此,我們得到浮點值的整數部分。

使用 Java 中的 Math 庫函式將浮點數轉換為整數

我們可以使用 JavaScript Math 庫,該庫具有各種函式,可以從浮點數獲取整數。與按位運算子不同,它們根據要求提供額外的功能,例如將值四捨五入到最接近的數字,截斷值等。為此,我們可以使用以下方法。

Math.floor() 進行轉換

Math.floor() 函式將作為引數傳遞的值四捨五入到下一個較低的整數值。Math.floor() 的語法是 Math.floor(<float value>)。以下是一些示例,展示了用法以及如何將浮點數轉換為整數。

console.log(Math.floor(123.321));
console.log(Math.floor(123.53));
console.log(Math.floor(23.97));
console.log(Math.floor(-23.97));
console.log(Math.floor(-0.97));

輸出:

123
123
23
-24
-1

Math.floor(-23.97) 這樣的負浮點數的情況似乎令人困惑,但是該函式正確地將值轉換為下一個較低的整數 -24。記住負數的數值越高,其實際值越小。

Math.round() 轉換

Math.floor() 函式不同,Math.round() 近似傳遞給引數的值。如果小數點後的值為 5 或更大,則該數字將四捨五入為下一個較大的整數。否則,如果小數點後的值小於 5,則將其舍入為較小的整數。因此,基於小數點後的值,Math.round() 函式的行為類似於 Math.floor()Math.ceil() 函式。以下是 Math.round() 的一些示例。

console.log(Math.round(123.321));
console.log(Math.round(123.53));
console.log(Math.round(23.97));
console.log(Math.round(-23.97));
console.log(Math.round(-0.97));

輸出:

123
124
24
-24
-1

Math.ceil() 轉換

Math.ceil() 函式的行為與 Math.floor() 函式相反。而不是像 Math.floor() 中那樣四捨五入到下一個較低的整數,Math.ceil() 返回下一個較高的整數值。以下是 Math.ceil() 的一些轉換。

console.log(Math.ceil(123.321));
console.log(Math.ceil(123.53));
console.log(Math.ceil(23.97));
console.log(Math.ceil(-23.97));
console.log(Math.ceil(-0.97));

輸出:

124
124
24
-23
-0

使用 Math.trunc() 進行轉換

顧名思義,Math.trunc() 函式會截斷十進位制值,並返回浮點值的整數部分。可以認為該方法類似於前面討論的按位運算子。在這裡,沒有四捨五入到最接近的整數。而是按原樣返回浮點值的整數部分。以下是 Math.trunc() 的一些用例。

console.log(Math.trunc(123.321));
console.log(Math.trunc(123.53));
console.log(Math.trunc(23.97));
console.log(Math.trunc(-23.97));
console.log(Math.trunc(-0.97));

輸出:

123
123
23
-23
-0

總結

有多種方法可以從浮點數中獲取整數部分。按位運算子在二進位制級別上執行操作而無需轉換或任何其他處理的要求,因此執行速度更快。parseInt()Math.trunc() 和按位運算子(與 0 邏輯或運算,雙 NOT,右移 0)給出確切的整數,就好像它們撕裂了浮點值一樣在小數點處,然後返回其中的整數部分。如果我們有興趣處理浮點數以使其舍入或根據業務需求獲取最接近的整數,則最好使用 Number.toFixed()Math.round()Math.ceil()Math.floor() 功能。

相關文章 - JavaScript Integer