- 1 1. 前言
- 2 2. Python 除法:基本的 / 運算子
- 3 3. Python 的向下取整除法(Floor 除法・轉為整數)
- 4 4. Python 的向上取整除法(math.ceil())
- 5 5. 同時取得商與餘數的方法
- 6 6. Python 除法常見問題(FAQ)
- 7 7. 總結
1. 前言
1-1. Python 除法的基本概念
在 Python 中,有多種方式可以進行除法運算。主要有以下三種類型,每種的結果格式與用途皆不同。
- 一般除法(
/
)
- 結果會是浮點數(
float
) - 範例:
10 / 3
→3.3333333333333335
- 向下取整除法(Floor 除法
//
)
- 結果會去除小數部分,只保留整數
- 範例:
10 // 3
→3
- 取餘數的除法(
%
)
- 可以取得除法的餘數
- 範例:
10 % 3
→1
理解這些運算方式,並根據情況正確使用,是在 Python 中進行數值處理時非常重要的能力。
1-2. 如何讓除法結果成為整數
1-2-1. 使用 //
(向下取整)
向下取整除法(//
)會去除小數部分,僅保留整數。
print(10 // 3) # 輸出: 3
print(-10 // 3) # 輸出: -4 (向負數方向取整)
1-2-2. 使用 int()
也可以將一般除法(/
)的結果,透過 int()
明確轉換為整數。
print(int(10 / 3)) # 輸出: 3
不過請注意,int()
是單純捨去小數點以下的部分,處理負數時要特別小心。
1-3. 向下取整與四捨五入的差異
當需要將除法結果轉為整數時,理解「向下取整」與「四捨五入」的差異也很重要。
- 向下取整:直接去除小數點以下(例:
3.9
→3
) - 四捨五入:根據小數進行四捨五入(例:
3.5
→4
)
在 Python 中,可以使用 round()
函數來進行四捨五入。
print(round(3.5)) # 輸出: 4
print(round(3.4)) # 輸出: 3
1-4. 本文將學到的內容
本文將針對 Python 中的除法運算進行詳細說明,特別是著重於「向下取整除法」的運用。接下來的章節會搭配實際範例與注意事項,讓你掌握更實用的技巧。
2. Python 除法:基本的 /
運算子
2-1. /
(斜線)運算子的基本概念
在 Python 中使用 /
進行除法時,結果一定會是浮點數(float
)。即使兩個操作數都是整數,結果也會是 float
。
範例:一般除法
print(10 / 3) # 輸出: 3.3333333333333335
print(8 / 2) # 輸出: 4.0
print(5 / 2) # 輸出: 2.5
如上所示,計算結果為 float
型別,並保留小數點以下的值。
2-2. int
與 float
的差異
當使用 Python 的 /
運算子時,即使輸入是 int
,結果也會變成 float
。
範例:包含整數的運算
a = 10
b = 2
c = a / b
print(c) # 輸出: 5.0
print(type(c)) # 輸出: <class 'float'>
在這段程式中,a
和 b
是整數,但 a / b
的結果是 float
型別的 5.0
。
2-3. 如果需要整數結果時的處理方式
2-3-1. 使用 //
(向下取整除法)
使用 //
可以取得去除小數部分後的整數結果。
print(10 // 3) # 輸出: 3
print(8 // 2) # 輸出: 4
2-3-2. 使用 int()
明確轉換為整數
也可以先使用 /
進行除法,然後透過 int()
來捨去小數部分,取得整數。
print(int(10 / 3)) # 輸出: 3
但需特別留意在處理負數時的行為。
2-4. 使用 /
進行計算時的注意事項
2-4-1. 除以 0
會導致錯誤
在 Python 中,若除數為 0,會發生 ZeroDivisionError
錯誤,導致程式中斷。
print(10 / 0) # ZeroDivisionError: division by zero
建議處理方式:
可先用 if
條件式檢查除數是否為零,避免錯誤發生。
a, b = 10, 0
if b != 0:
print(a / b)
else:
print("無法除以零")
2-4-2. 負數的除法
對負數使用 /
進行除法時,結果會遵循數學規則,並返回 float
類型的結果。
print(-10 / 3) # 輸出: -3.3333333333333335
print(10 / -3) # 輸出: -3.3333333333333335
在處理負數時,若需進行向下取整或四捨五入,請選擇合適的方法。
2-5. /
運算子的用途與總結
- 使用
/
時,結果一定會是float
類型 - 如果需要整數結果,請使用
//
或int()
- 除以
0
會導致錯誤,務必事先檢查 - 處理負數除法時,須注意結果的方向與捨入方式
3. Python 的向下取整除法(Floor 除法・轉為整數)
3-1. //
(Floor 除法)的基本概念
使用 //
運算子可以在除法中去除小數點以下,只取得整數部分的結果。
範例:Floor 除法
print(10 // 3) # 輸出: 3
print(8 // 2) # 輸出: 4
print(5 // 2) # 輸出: 2
與一般的 /
(斜線)除法不同,//
的結果是 整數(int
類型)。
print(10 / 3) # 輸出: 3.3333333333333335
print(10 // 3) # 輸出: 3
也就是說,//
會忽略小數點以下的部分,只保留整數。
3-2. 與 int()
的差異
除了使用 //
之外,也可以透過 int()
將結果轉為整數。不過這兩者之間有些不同。
使用 int()
的情況
先使用 /
取得浮點數的結果,再透過 int()
轉為整數。
print(int(10 / 3)) # 輸出: 3
與 //
的差異
int()
會將 float
類型的數字捨去小數點以下,而 //
則直接以整數方式計算,因此 //
在效能上會更好。
print(type(10 // 3)) # 輸出: <class 'int'>
print(type(int(10 / 3))) # 輸出: <class 'int'>
雖然結果看起來一樣,但 int()
是先進行浮點運算再轉型,//
則是直接整數運算,通常更推薦使用。
3-3. 注意負數的向下取整(例如 -10 // 3
)
當使用 //
運算子計算負數時,結果會根據數學上的「向下取整(floor)」行為,有時可能與直覺不一致。
範例:負數的 Floor 除法
print(-10 // 3) # 輸出: -4
根據一般理解,-10 ÷ 3 = -3.333...
可能會期待結果是 -3
,但因為 Python 的 //
是往小的方向取整,所以結果是 -4
。
正數與負數的比較
print(10 // 3) # 輸出: 3
print(-10 // 3) # 輸出: -4
這是因為 Python 的 //
運算子本質上是「floor()
」的行為,在處理負數時要特別注意。
3-4. 與 math.floor()
的差異
Python 也提供 math.floor()
函數來執行向下取整的功能。
math.floor()
的基本用法
import math
print(math.floor(10 / 3)) # 輸出: 3
print(math.floor(-10 / 3)) # 輸出: -4
math.floor()
與 //
一樣是向下取整,不過返回的型別會是 float
。
print(type(10 // 3)) # 輸出: <class 'int'>
print(type(math.floor(10 / 3))) # 輸出: <class 'float'>
了解兩者差異後,可以根據用途選擇最合適的方法。
3-5. //
運算子的應用與總結
使用 Python 的 //
(向下取整除法)可以快速取得整數結果,在以下情況特別實用:
- 只需要整數結果時
- 範例:計算分頁的總頁數
items = 45
per_page = 10
total_pages = (items + per_page - 1) // per_page
print(total_pages) # 輸出: 5
- 處理負數時需特別留意
//
會向小的方向取整,結果可能不是你原本預期的- 希望加快計算速度、避免小數處理時
int(10 / 3)
的寫法比10 // 3
更慢,因此//
效率較佳

4. Python 的向上取整除法(math.ceil()
)
4-1. math.ceil()
的基本概念
Python 中的 math.ceil()
函數會無條件將小數點以上進位為整數。此函數屬於 math
模組,因此使用前需先 import math
。
範例:math.ceil()
的使用方式
import math
print(math.ceil(10 / 3)) # 輸出: 4
print(math.ceil(5 / 2)) # 輸出: 3
print(math.ceil(4.2)) # 輸出: 5
如上所示,math.ceil()
會將小數全部進位為最接近的較大整數。
4-2. math.ceil()
與 //
(Floor 除法)的差異
向上取整與向下取整的行為正好相反,理解它們的差異非常重要。
向下取整(//
)
print(10 // 3) # 輸出: 3
print(-10 // 3) # 輸出: -4
//
會去除小數並往較小的方向取整(對負數更小)- 處理負數時要特別注意結果
向上取整(math.ceil()
)
import math
print(math.ceil(10 / 3)) # 輸出: 4
print(math.ceil(-10 / 3)) # 輸出: -3
math.ceil()
會無條件往較大的方向取整- 對於負數,結果會趨近於零
4-3. 使用 math.ceil()
的實用範例
4-3-1. 計算總頁數
例如,當你需要將資料分頁顯示時,即使最後一頁不滿,也需要多加一頁,這時就適合使用向上取整。
import math
items = 45 # 總項目數
per_page = 10 # 每頁顯示的項目數
total_pages = math.ceil(items / per_page)
print(total_pages) # 輸出: 5
4-3-2. 計算每人需處理的次數
假設有 100 個任務要由 5 人處理,為了平均分配,即使不能整除也必須有人多處理一次。
import math
tasks = 100 # 總任務數
workers = 6 # 人員數
tasks_per_worker = math.ceil(tasks / workers)
print(tasks_per_worker) # 輸出: 17
4-4. 不使用 math.ceil()
也能實現向上取整
其實在不使用 math.ceil()
的情況下,也可以透過簡單的公式進行向上取整。
使用公式 (a + b – 1) // b
透過將被除數 a
加上 b - 1
再除以 b
,即可達到向上取整的效果。
def ceil_div(a, b):
return (a + b - 1) // b
print(ceil_div(10, 3)) # 輸出: 4
print(ceil_div(5, 2)) # 輸出: 3
4-5. math.ceil()
的應用場景與總結
Python 的 math.ceil()
函數非常適合需要將小數進位為整數的情況,尤其適合下列用途:
- 計算頁數或群組數
import math
items = 45
per_page = 10
total_pages = math.ceil(items / per_page)
print(total_pages) # 輸出: 5
- 即使有餘數也希望多處理一次時
import math
tasks = 100
workers = 6
tasks_per_worker = math.ceil(tasks / workers)
print(tasks_per_worker) # 輸出: 17
- 想用純整數方式實現向上取整
def ceil_div(a, b):
return (a + b - 1) // b
print(ceil_div(10, 3)) # 輸出: 4
5. 同時取得商與餘數的方法
5-1. 使用 %
(模除運算子)計算餘數
在 Python 中,最基本的取得餘數方法是使用 %
(模除運算子)。
範例:餘數的計算
print(10 % 3) # 輸出: 1
print(20 % 7) # 輸出: 6
a % b
表示 a
除以 b
後的餘數。例如 10 % 3
等於 10 ÷ 3 = 3 餘 1
,所以輸出 1
。
注意:處理負數時的餘數
Python 中的 %
運算子會根據除數的符號決定餘數方向,處理負數時要特別小心。
print(-10 % 3) # 輸出: 2
print(10 % -3) # 輸出: -2
這是因為 Python 中的 %
會讓餘數與除數具有相同的符號,這一點與其他語言可能不同。
5-2. 使用 divmod()
同時取得商與餘數
Python 提供的 divmod()
函數可以一次取得商與餘數,不需分別計算兩次。
divmod()
的基本用法
quotient, remainder = divmod(10, 3)
print(quotient) # 輸出: 3
print(remainder) # 輸出: 1
divmod(10, 3)
會回傳一個元組 (3, 1)
,其中 3
是商,1
是餘數。
處理負數時的行為
divmod()
的行為與 //
和 %
一致,也會依照 Python 的規則處理符號。
print(divmod(-10, 3)) # 輸出: (-4, 2)
print(divmod(10, -3)) # 輸出: (-4, -2)
可以看到,商的部分與 //
相同,餘數則與 %
相同。
5-3. 與分別使用 //
和 %
的比較
divmod(a, b)
相當於同時計算 a // b
和 a % b
,來比較兩種寫法的差異。
方式一:分別計算兩次
a = 10
b = 3
quotient = a // b
remainder = a % b
print(quotient) # 輸出: 3
print(remainder) # 輸出: 1
這種方式需要執行兩次運算。
方式二:使用 divmod()
quotient, remainder = divmod(10, 3)
print(quotient) # 輸出: 3
print(remainder) # 輸出: 1
這種方式只需呼叫一次函數,更有效率且簡潔。
5-4. divmod()
的實用範例
5-4-1. 將總分鐘轉換為小時與分鐘
例如,將總時間 145
分鐘轉換為幾小時幾分鐘:
minutes = 145
hours, remainder_minutes = divmod(minutes, 60)
print(f"{hours}小時{remainder_minutes}分鐘") # 輸出: 2小時25分鐘
5-4-2. 硬幣換算的計算
使用 divmod()
可以快速將金額換算成硬幣組合:
amount = 758 # 758 日圓
yen_100, remainder = divmod(amount, 100)
yen_50, remainder = divmod(remainder, 50)
yen_10, remainder = divmod(remainder, 10)
print(f"100円: {yen_100}枚, 50円: {yen_50}枚, 10円: {yen_10}枚, 剩餘: {remainder}円")
5-5. 商與餘數的計算方法總結
在 Python 中可以依需求選擇不同方式計算商與餘數,以下是常見方法比較:
方法 | 使用方式 | 可得商 | 可得餘數 |
---|---|---|---|
// | a // b | ✔️ | ❌ |
% | a % b | ❌ | ✔️ |
divmod() | divmod(a, b) | ✔️ | ✔️ |
特別是 divmod()
可以同時取得商與餘數,減少計算次數,撰寫更有效率的程式碼。
6. Python 除法常見問題(FAQ)
6-1. 如何讓 Python 的除法結果變成整數?
在 Python 中,想讓除法結果為整數有以下三種常用方式:
① 使用 //
(向下取整除法)
//
可取得去除小數後的整數結果。
print(10 // 3) # 輸出: 3
print(-10 // 3) # 輸出: -4
② 使用 int()
先使用 /
得到浮點數,再使用 int()
轉為整數。
print(int(10 / 3)) # 輸出: 3
注意:int()
是無條件捨去小數,處理負數時結果可能與 //
不同。
③ 使用 math.floor()
math.floor()
會將浮點數向下取整為最接近的整數。
import math
print(math.floor(10 / 3)) # 輸出: 3
print(math.floor(-10 / 3)) # 輸出: -4
6-2. 向下取整和四捨五入有什麼不同?
- 向下取整:使用
//
或math.floor()
- 四捨五入:使用
round()
範例:四捨五入
print(round(3.5)) # 輸出: 4
print(round(3.4)) # 輸出: 3
Python 的 round()
採用銀行家捨入法(偶數捨入),所以 round(2.5)
為 2
,round(3.5)
為 4
。
6-3. int()
和 math.floor()
有什麼差異?
方法 | 行為 | 處理負數 | 回傳型別 |
---|---|---|---|
int() | 捨去小數點 | int(-3.9) → -3 | int |
math.floor() | 總是向下取整 | math.floor(-3.9) → -4 | float |
由於處理負數時行為不同,選用時需根據需求判斷。
6-4. 對負數做向下取整要注意什麼?
Python 的 //
是向負無限方向取整,處理負數時可能會與直覺不同。
print(-10 // 3) # 輸出: -4
這類情況可以改用 math.floor()
做更明確的控制。
6-5. 如何指定四捨五入的小數位數?
使用 round()
時可以指定要保留的小數點位數。
print(round(3.14159, 2)) # 輸出: 3.14
print(round(3.14159, 3)) # 輸出: 3.142
6-6. 除以 0 會發生什麼事?
在 Python 中,若進行除以 0 的運算,會出現 ZeroDivisionError
。
print(10 / 0) # ZeroDivisionError: division by zero
預防方式是先用 if
判斷除數是否為 0。
a, b = 10, 0
if b != 0:
print(a / b)
else:
print("無法除以零")
6-7. divmod()
有哪些優點?
divmod()
可同時取得商與餘數,減少計算次數,更有效率。
quotient, remainder = divmod(10, 3)
print(quotient) # 輸出: 3
print(remainder) # 輸出: 1
6-8. 如何在 Python 中進行更精確的小數計算?
若對精度要求很高,建議使用 decimal
模組以避免浮點誤差。
from decimal import Decimal
a = Decimal('10.1')
b = Decimal('3.3')
print(a / b) # 可進行精確計算
6-9. 如何將除法結果格式化為字串?
可以使用 f-string
或 format()
將除法結果格式化輸出。
result = 10 / 3
print(f"{result:.2f}") # 輸出: 3.33
print("{:.2f}".format(result)) # 輸出: 3.33
7. 總結
7-1. 根據不同情境選擇最適合的方法
Python 中的除法方式有多種,根據情況選擇合適的方法非常重要。以下是根據不同需求推薦的做法:
情境 | 推薦方法 | 說明 |
---|---|---|
需要保留小數點的精確計算 | / | 一般除法(結果為浮點數) |
需要整數結果(向下取整) | // | Floor 除法,回傳整數類型 |
將浮點數轉為整數(捨去小數) | int() | 將 float 類型轉成 int (注意負數行為) |
希望向上取整 | math.ceil() | 使用 math.ceil() 進行無條件進位 |
只想取得餘數 | % | 取得除法後的餘數 |
想同時取得商與餘數 | divmod() | 一次取得商與餘數,效率較高 |
避免浮點數誤差,追求高精度 | decimal.Decimal | 使用高精度模組 decimal |
7-2. 使用除法時的注意事項
在 Python 中進行除法運算時,請特別注意以下幾點:
1. //
(Floor 除法)處理負數的方式不同
//
是朝向較小方向取整,負數的結果可能不如預期。
print(-10 // 3) # 輸出: -4
理解此行為後,如有需要也可以選擇使用 math.floor()
。
2. 除以零會導致錯誤
Python 中除數為 0 時會引發 ZeroDivisionError
,建議事先檢查。
a, b = 10, 0
if b != 0:
print(a / b)
else:
print("無法除以零")
3. round()
採用銀行家捨入法(偶數捨入)
這種捨入規則會將 .5 四捨五入到最接近的偶數。
print(round(2.5)) # 輸出: 2
print(round(3.5)) # 輸出: 4
4. 使用 divmod()
可提升效能
與分別使用 //
和 %
相比,divmod()
可減少運算次數。
quotient, remainder = divmod(10, 3)
print(quotient) # 輸出: 3
print(remainder) # 輸出: 1
7-3. 本文總結
Python 中的除法運算方式相當多元,每種方法都有不同的用途與特性。以下為本篇的重點整理:
- 一般除法(
/
):回傳float
類型的結果 - 若需要整數結果,使用
//
(Floor 除法) - 負數的
//
結果會向下取整(可能是更小的整數) - 四捨五入時可使用
round()
- 若要進位取整,使用
math.ceil()
;向下取整則用math.floor()
- 求餘數用
%
,同時計算商與餘數用divmod()
- 需要高精度運算時,建議使用
decimal.Decimal
若能掌握這些除法運算方式,將能更靈活、正確地處理各種資料計算任務。
本文到此結束,希望你對 Python 的除法處理有更深入的了解。若仍有疑問,建議查閱官方文件或實際撰寫程式碼來加深理解。
讓我們一起持續學習,讓 Python 編程之路更順利、更高效!