本文 AI 產出,尚未審核

Python

變數與資料型別(Variables & Data Types)

主題:整數(int)與浮點數(float)


簡介

在程式設計的世界裡,數值型別是最常見、也是最基礎的資料類別。不論是寫一個簡單的計算機,還是開發大型的機器學習模型,都離不開 int(整數)與 float(浮點數)。
本單元將帶你深入了解 Python 中的整數與浮點數,說明它們的特性、相互轉換方式,以及在實務開發時需要留意的細節。掌握這些概念後,你才能寫出 正確、可預測且效能佳 的數值運算程式。


核心概念

1. 整數(int)— 基本特性

  • Python 的 int 支援任意長度,只要記憶體允許,就不會發生 overflow。
  • 整數在記憶體中的儲存方式是二進位補數(two's complement),但在 Python 內部是以 大數演算法 實作,使用者不必關心位元長度。

程式碼範例 1:任意大整數

# 任意大的整數不會拋出 OverflowError
big_num = 1234567890123456789012345678901234567890
print(big_num)               # 1234567890123456789012345678901234567890
print(type(big_num))         # <class 'int'>

2. 浮點數(float)— 基本特性

  • Python 的 float 採用 IEEE 754 雙精度(64 位元)實作,約有 15~17 位有效數字。
  • 浮點數的表示方式是 科學記號(sign × mantissa × 2^exponent),因此在某些十進位運算上會出現 舍入誤差

程式碼範例 2:浮點數的精度限制

a = 0.1 + 0.2
print(a)                     # 0.30000000000000004
# 雖然理論上應該是 0.3,但因為二進位表示的限制產生了微小誤差

3. 整數 ↔ 浮點數的相互轉換

方向 函式 會發生的情況
int → float float() 直接轉換,可能出現科學記號顯示
float → int int() 捨去小數部份(向 0 截斷),不會四捨五入

程式碼範例 3:型別轉換

i = 42
f = float(i)                 # 42.0
print(f, type(f))

f2 = 3.99
i2 = int(f2)                 # 3,捨去小數
print(i2, type(i2))

4. 常見的數學運算與除法行為

  • +、-、*:對 intfloat 均支援,若任一操作元是 float,結果皆為 float
  • /(除法):永遠返回 float,即使兩個都是 int
  • //(地板除):返回整數除法結果,向負無限大取整。
  • %(模數):返回餘數,結果型別與被除數相同。

程式碼範例 4:除法與地板除

a = 7
b = 2
print(a / b)   # 3.5,結果是 float
print(a // b)  # 3,結果是 int(地板除)
print(a % b)   # 1,餘數

5. 內建函式與模組輔助

功能 函式 / 模組 說明
絕對值 abs() 取得正數
四捨五入 round() 可指定小數位
進位制轉換 bin()、oct()、hex() 轉成二、八、十六進位字串
高精度小數 decimal.Decimal 需要精確金融計算時使用
分式運算 fractions.Fraction 以分數形式保存精確值

程式碼範例 5:使用 decimal 提升精度

from decimal import Decimal, getcontext

# 設定全域精度為 28 位(預設值)
getcontext().prec = 28

x = Decimal('0.1')
y = Decimal('0.2')
z = x + y
print(z)                     # 0.3,沒有浮點誤差

常見陷阱與最佳實踐

  1. 浮點數比較
    直接使用 == 可能因舍入誤差導致錯誤判斷。
    最佳做法:使用 math.isclose() 或自行設定容差範圍。

    import math
    a = 0.1 + 0.2
    print(math.isclose(a, 0.3))   # True
    
  2. 除法得到意外的型別
    5 / 2 會得到 2.5(float),若期待整數結果,請改用 //
    最佳做法:明確使用 // 或在需要時手動 int() 轉型。

  3. 大數運算的效能
    任意長度的 int 雖然安全,但在大量迭代中可能拖慢程式。
    最佳做法:若可預測數值範圍,使用 int(固定長度)或 numpy.int64

  4. 金融或會計領域的精度需求
    使用 float 會產生不可預期的誤差。
    最佳做法:改用 decimal.Decimalint(以最小貨幣單位儲存)。

  5. 字串與數值的隱式轉換
    Python 不會自動把字串轉成數值,必須手動 int()float()
    最佳做法:在取得外部輸入(如使用者輸入、檔案讀取)後,先驗證再轉型。


實際應用場景

場景 為何需要 int / float 範例程式碼
計數器(網站點擊、API 請求) 整數提供精確計數,且不會產生捨入誤差。 counter += 1
金融交易(價格、金額) 必須避免浮點誤差,常以 最小貨幣單位(如分)儲存為 int,或使用 Decimal price = Decimal('199.99') * qty
科學計算(測量值、統計) 需要浮點數的寬廣範圍與小數位。 average = sum(values) / len(values)
時間戳記(Unix 時間) 使用 int 表示秒或毫秒,避免浮點不精確。 timestamp = int(time.time())
圖形與座標(遊戲開發) 位置常用 float,但格子索引則用 int x, y = 12.5, 7.3grid_x = int(x)

總結

  • 整數 (int):任意長度、精確、適合計數與離散資料;在 Python 中不會 overflow。
  • 浮點數 (float):IEEE 754 雙精度、適合連續值與科學計算;須留意舍入誤差與比較問題。
  • 型別轉換float()int()Decimal 為常用工具,選對工具才能避免隱藏的錯誤。
  • 最佳實踐:明確使用除法符號、避免直接比較浮點數、在金融領域使用 Decimal、適度控制大數運算的效能。

掌握了 intfloat 的特性與限制,你就能在寫程式時自信地選擇最適合的數值型別,讓程式更正確、可維護且效能優化。祝你在 Python 的旅程中,玩得開心、寫得順利!