HOWTO · Python
在 Python 中將浮點數轉換為整數
本文介紹如何在 Python 中將浮點數轉換為整數
本頁內容
在 Python 中,若要捨去小數部分並朝零截斷,請使用內建的 int()。若需要不同規則,可用 math.ceil() 取得大於或等於該值的最小整數,或用 math.floor() 取得小於或等於該值的最大整數。標準函式庫也提供 math.trunc(),可朝零截斷。請依計算所需的取整方式選擇函式;遇到負數時,這些函式的結果並不相同。
使用 int() 將浮點數轉換為整數
執行以下範例:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
number = 25.49
print(int(number))
25
對於正的小數值,int() 會捨去小數部分。負數也會朝零截斷:int(-1.5) 的結果是 -1,而不是 -2。這是截斷,不是四捨五入到最接近的整數。若需要取最接近的值,請使用取整函式,不要假設 int() 會替你完成這項操作。
int() 可接受浮點數、整數,以及表示整數的文字,例如 int("25")。含有小數點的文字,例如 "25.49",並不是整數格式的字串,因此不能直接傳給 int()。若要截斷小數文字,請先將其轉為浮點數,再轉換該浮點數。請留意輸入型別:傳入數值浮點數與傳入字串是不同的轉換。
浮點數常值實際表示的值,也可能與寫下的十進位數字不同。例如,Python 可能會將 1.9999999999999999 表示為 2.0;此時再對已表示的浮點數使用 int(),結果就是 2.0 所代表的整數。int() 並沒有針對十六個或更多個 9 的特殊規則。轉換時使用的是解析後實際存在的浮點數值,因此接近整數的結果可能同時受到浮點數表示方式與截斷影響。
使用 math 選擇截斷、無條件進位或無條件捨去
需要明確指定取整規則時,可使用 math 模組。math.trunc() 朝零截斷,對浮點數而言與 int() 的行為相同。math.ceil() 會回傳大於或等於某個值的最小整數;math.floor() 則會回傳小於或等於該值的最大整數。這些差異在負數時尤其明顯:-1.5 朝零截斷會得到 -1,向下取整則得到 -2,向上取整會得到 -1。對正的小數而言,截斷與向下取整都會得到較小的整數,而向上取整會得到較大的整數。
以下是完整範例,會以正數和負數比較這三個標準函式庫函式。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
import math
for number in (1.5, -1.5):
print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2
若要朝零捨去小數部分,請使用 int() 或 math.trunc();若結果不得小於輸入值,請使用 math.ceil();若結果不得大於輸入值,請使用 math.floor()。例如,將測量值轉換為整數單位時,請先決定應用程式要保留已完整包含的單位、確保分配的單位數足夠,還是只計算測量值中完全容納的單位。將規則明確寫在程式碼中,能讓結果更容易檢查,也可避免不小心使用錯誤的取整方向。
對一般的有限數值輸入而言,以上函式都會回傳 Python 整數,但不會保留小數資訊。若後續計算仍需要精度,請同時保留原始浮點數與轉換後的整數。若十進位數量需要精確的十進位運算,請考慮在轉換前改用十進位表示法;已近似表示的浮點數一旦轉換,便無法找回表示過程中遺失的十進位數字。