Python中向上取整(Ceiling)的方法匯總
在 Python 中,向上取整(Ceiling)主要有以下幾種方法,根據(jù)你的使用場景選擇最合適的:
方法一:使用math.ceil()(最標準、最推薦)
這是 Python 標準庫 math 模塊提供的函數(shù),專門用于向上取整。
特點:
- 返回大于或等于原數(shù)的最小整數(shù)。
- 返回值類型為
int(Python 3 中)。 - 對于負數(shù),也是向“正無窮”方向取整(例如 -3.2 向上取整是 -3)。
import math # 正數(shù) print(math.ceil(3.2)) # 輸出: 4 print(math.ceil(3.9)) # 輸出: 4 print(math.ceil(3.0)) # 輸出: 3 # 負數(shù)(注意:向上取整是往數(shù)軸右邊取整) print(math.ceil(-3.2)) # 輸出: -3 print(math.ceil(-3.9)) # 輸出: -3 # 整數(shù) print(math.ceil(5)) # 輸出: 5
方法二:使用numpy.ceil()(適合數(shù)組/科學計算)
如果你在處理 NumPy 數(shù)組或需要進行向量化計算,使用 NumPy 的函數(shù)效率更高。
特點:
- 可以對單個數(shù)字或整個數(shù)組進行操作。
- 返回值是浮點數(shù)(float),即使結(jié)果是整數(shù)(例如 4.0)。
import numpy as np # 單個數(shù)字 print(np.ceil(3.2)) # 輸出: 4.0 print(np.ceil(-3.2)) # 輸出: -3.0 # 數(shù)組(批量處理) arr = np.array([1.2, 2.5, 3.7, -1.5]) result = np.ceil(arr) print(result) # 輸出: [ 2. 3. 4. -1.] print(result.dtype) # 輸出: float64
方法三:使用整數(shù)運算技巧(不依賴 math 庫)
在某些性能敏感或不能導入庫的場景下,可以用純數(shù)學運算實現(xiàn)。
1. 對于正數(shù)的除法向上取整
這是一個非常經(jīng)典的技巧,常用于分頁計算(計算總頁數(shù)):
# 公式: (被除數(shù) + 除數(shù) - 1) // 除數(shù)
a = 10
b = 3
# 10 / 3 = 3.333... 向上取整應(yīng)該是 4
result = (a + b - 1) // b
print(result) # 輸出: 4
# 另一個例子
items = 105
page_size = 10
pages = (items + page_size - 1) // page_size
print(f"需要 {pages} 頁") # 輸出: 需要 11 頁
2. 通用的向上取整(不推薦,僅作了解)
def custom_ceil(x):
# 如果 x 已經(jīng)是整數(shù),直接返回
if x == int(x):
return int(x)
# 如果是正數(shù),整數(shù)部分+1
elif x > 0:
return int(x) + 1
# 如果是負數(shù),直接取整數(shù)部分(因為 -3.2 的整數(shù)部分是 -3,已經(jīng)是向上取整了)
else:
return int(x)
print(custom_ceil(3.2)) # 4
print(custom_ceil(-3.2)) # -3
注意:這種方法容易出錯,強烈建議直接使用 math.ceil()。
方法對比總結(jié)
| 方法 | 適用場景 | 返回值類型 | 備注 |
|---|---|---|---|
math.ceil() | 通用場景,單個數(shù)字 | int | 最推薦,標準庫,清晰準確 |
numpy.ceil() | 數(shù)組、矩陣、科學計算 | float | 批量處理效率高,但結(jié)果是浮點數(shù) |
| 整數(shù)運算 | 正數(shù)除法、分頁計算 | int | 性能極高,但只適用于特定場景 |
常見誤區(qū):向上取整 vs 四舍五入
不要把向上取整(ceil)和四舍五入(round)搞混了:
import math
x = 3.2
print(f"math.ceil(3.2) = {math.ceil(3.2)}") # 向上取整: 4 (往大了取)
print(f"round(3.2) = {round(3.2)}") # 四舍五入: 3 (看小數(shù)位)
y = 3.7
print(f"math.ceil(3.7) = {math.ceil(3.7)}") # 向上取整: 4
print(f"round(3.7) = {round(3.7)}") # 四舍五入: 4
結(jié)論:日常開發(fā)中,請直接使用 math.ceil()。
到此這篇關(guān)于Python中向上取整(Ceiling)的方法匯總的文章就介紹到這了,更多相關(guān)Python向上取整內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python可變參數(shù)*args和**kwargs用法實例小結(jié)
這篇文章主要介紹了Python可變參數(shù)*args和**kwargs用法,結(jié)合實例形式總結(jié)分析了Python中可變參數(shù)*args和**kwargs的功能、區(qū)別與具體使用技巧,需要的朋友可以參考下2018-04-04
python 日志模塊 日志等級設(shè)置失效的解決方案
這篇文章主要介紹了python 日志模塊 日志等級設(shè)置失效的問題及解決方案,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Python深度學習pytorch神經(jīng)網(wǎng)絡(luò)填充和步幅的理解
這篇文章主要介紹了Python深度學習pytorch神經(jīng)網(wǎng)絡(luò)填充和步幅的理解2021-10-10
python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細使用方法與實例,需要的朋友可以參考下2020-03-03

