Python int 整數與 float 浮點數完整教學

Python 有兩種核心數值型別:int(整數)float(浮點數),前者處理沒有小數的整數,後者處理帶小數點的數字。本文涵蓋兩者的建立方式、運算特性、型別轉換、精度陷阱,以及常見錯誤防呆,是掌握 Python 數值運算的必讀基礎。

Two glowing numeric orbs representing integer and float data types floating in deep space, one solid amber and one translucent with decimal ripples, cinematic lighting, deep shadows, 16:9, dark tech atmosphere

什麼是 int 與 float?

int 是整數,float 是帶小數點的數字——就這麼簡單。在 Python 中,你不需要事先宣告型別,只要寫下 10 就是 int,寫下 10.0 就是 float。整數可以無限大(受記憶體限制),浮點數則使用 IEEE 754 雙精度標準,約有 15~17 位有效數字。兩者之間可以互相轉換,也能混合運算,但有些細節需要特別留意。

核心語法

# ── 範例 1:建立 int 與 float ──
a = 42          # int:整數,無小數點
b = 3.14        # float:浮點數,有小數點
c = 1_000_000   # int:底線可作為千分位分隔符,增加可讀性
d = 2.0         # float:雖然值看起來是整數,但型別是 float

print(type(a))  # 
print(type(b))  # 
print(type(c))  # 
print(type(d))  # 
# ── 範例 2:基本運算 ──
print(7 + 2)    # 加法 → 9
print(7 - 2)    # 減法 → 5
print(7 * 2)    # 乘法 → 14
print(7 / 2)    # 除法 → 3.5(Python 3 預設回傳 float)
print(7 // 2)   # 整數除法(地板除)→ 3
print(7 % 2)    # 取餘數 → 1
print(2 ** 10)  # 次方 → 1024
# ── 範例 3:型別轉換(Type Conversion)──
x = int(3.9)      # float → int,直接截去小數(不四捨五入)→ 3
y = float(5)      # int → float → 5.0
z = int("123")    # 字串 → int → 123(字串必須是合法數字)

print(x)  # 3
print(y)  # 5.0
print(z)  # 123

# 四捨五入:使用 round()
pi = 3.14159
print(round(pi, 2))   # 指定保留 2 位小數 → 3.14
print(round(pi))      # 四捨五入至整數 → 3

Python 3 的 / 除法永遠回傳 float,即使能整除也一樣(6 / 3 → 2.0)。若想要整數結果,請改用 //(地板除)。這與 Python 2 的行為不同,初學者需特別注意。

規則與注意事項

規則 ✅ 正確範例 ❌ 錯誤範例 / 陷阱
int 與 float 混合運算,結果為 float 3 + 1.0 → 4.0 誤以為結果是 int
/ 永遠回傳 float 10 / 2 → 5.0 誤以為 10 / 2 → 5(int)
int() 截去小數,不四捨五入 int(3.9) → 3 誤以為 int(3.9) → 4
float 有精度限制 使用 round() 處理輸出 0.1 + 0.2 == 0.3False
大整數可用底線分隔提升可讀性 1_000_000 1,000,000(逗號是 tuple 語法!)

常見錯誤與防呆

錯誤一:把字串誤當數字進行運算

# ❌ 錯誤寫法(TypeError:can only concatenate str not int to str)
num = input("請輸入數字:")  # input() 永遠回傳字串
result = num + 10            # TypeError!

# ✅ 正確寫法:先轉型再運算
num = int(input("請輸入數字:"))
result = num + 10
print(result)

錯誤二:用 int() 轉換非數字字串

# ❌ 錯誤寫法(ValueError: invalid literal for int() with base 10: 'abc')
x = int("abc")   # ValueError!

# ✅ 正確寫法:先確認是否為合法數字
s = "123"
if s.isdigit():
    x = int(s)
    print(x)  # 123

錯誤三:float 精度誤差導致比較失敗

# ❌ 常見陷阱(結果為 False,非預期!)
print(0.1 + 0.2 == 0.3)  # False(IEEE 754 浮點精度問題)

# ✅ 正確寫法:使用 round() 或 math.isclose()
import math
print(math.isclose(0.1 + 0.2, 0.3))  # True
print(round(0.1 + 0.2, 10) == 0.3)   # True

進階用法

科學記號與極大 / 極小浮點數

# Python 支援科學記號表示法
a = 1.5e3    # 等同於 1500.0
b = 2.5e-4   # 等同於 0.00025
c = 1e10     # 等同於 10000000000.0

print(a)     # 1500.0
print(b)     # 0.00025

# 檢查 float 的極限
import sys
print(sys.float_info.max)   # 約 1.7976931348623157e+308
print(sys.float_info.min)   # 約 2.2250738585072014e-308

數值格式化輸出

# 使用 f-string 控制小數位數
price = 1234.5678

print(f"{price:.2f}")    # 保留 2 位小數 → 1234.57
print(f"{price:,.2f}")   # 加入千分位逗號 → 1,234.57
print(f"{price:>12.2f}") # 右對齊,總寬 12 字元 → '     1234.57'

# 量化交易常用:計算損益
entry = 150.25
exit_price = 163.80
profit = (exit_price - entry) * 100   # 假設 100 股
print(f"損益:${profit:.2f}")          # 損益:$1355.00

整除與取餘的實戰應用

# 判斷奇偶數
num = 42
if num % 2 == 0:
    print(f"{num} 是偶數")
else:
    print(f"{num} 是奇數")

# 將秒數換算成時分秒
total_seconds = 3725
hours   = total_seconds // 3600          # 商 → 1 小時
minutes = (total_seconds % 3600) // 60   # 餘數再取商 → 2 分鐘
seconds = total_seconds % 60             # 最終餘數 → 5 秒
print(f"{hours}h {minutes}m {seconds}s") # 1h 2m 5s

🏮 煉金師小叮嚀

做量化策略時,我最常踩的坑就是 float 精度問題——比較兩個浮點數是否相等,直接用 == 常常出錯。後來我改用 math.isclose() 或在輸出前統一用 round() 處理,問題迎刃而解。另一個習慣是:涉及金錢計算時,優先考慮 decimal 模組,它能提供更精確的十進位運算,避免 IEEE 754 帶來的隱形誤差。

張貼留言

較新的 較舊