Bạn có thể chỉ làm phận sàn lộn ngược:
def ceildiv(a, b):
return -(-a // b)
này hoạt động vì Python's division operator does floor division (không giống như trong C, nơi phân chia số nguyên truncates phần phân đoạn).
Điều này cũng hoạt động với các số nguyên lớn của Python, vì không có chuyển đổi dấu chấm động (mất).
Dưới đây là một cuộc biểu tình:
>>> from __future__ import division # a/b is float division
>>> from math import ceil
>>> b = 3
>>> for a in range(-7, 8):
... print(["%d/%d" % (a, b), int(ceil(a/b)), -(-a // b)])
...
['-7/3', -2, -2]
['-6/3', -2, -2]
['-5/3', -1, -1]
['-4/3', -1, -1]
['-3/3', -1, -1]
['-2/3', 0, 0]
['-1/3', 0, 0]
['0/3', 0, 0]
['1/3', 1, 1]
['2/3', 1, 1]
['3/3', 1, 1]
['4/3', 2, 2]
['5/3', 2, 2]
['6/3', 2, 2]
['7/3', 3, 3]
"chia-then-ceil" là không thực sự là một điều phổ biến trong toán học, trong khi '// 'được dựa trên nguyên phân-với-mô đun hoạt động. – millimoose
Quan trọng: bạn có muốn có kết quả int hay float không? – smci
Bạn nên thay đổi câu trả lời được chấp nhận thành dlitz's. math.ceil là cho float, nó không hoạt động với ints dài chính xác tùy ý của Python. – endolith