Python’s floor division operator //
divides two numbers and rounds the result down to the nearest integer. Using it correctly prevents subtle rounding bugs, especially when porting integer-division logic or working with negative values.
Method 1: Compute Floor Division with //
Step 1: Use //
to get the quotient rounded down.
print(5 // 2) # 2
print(10 // 3) # 3
print(9 // 0.5) # 18.0 (float operand → float result)
print(8.0 // 3) # 2.0 (still floors)
Step 2: Verify the division identity a == (a // b) * b + (a % b)
.
a, b = 17, 5
print(a == (a // b) * b + (a % b)) # True
Step 3: Compare with /
to see the difference.
print(5 / 2) # 2.5 (true division)
print(5 // 2) # 2 (floor division)
Method 2: Replace int(x / y) with x // y (when safe)
Step 1: Find places where you divide and immediately convert to int.
# Before
mid = int(len(items) / 2)
Step 2: Replace with floor division for clearer intent and fewer conversions.
# After
mid = len(items) // 2
Step 3: Run tests to confirm identical results for positive numbers.
for n in range(1, 11):
a = int(n / 2)
b = n // 2
assert a == b
Method 3: Get Quotient and Remainder Together with divmod
Step 1: Use divmod(a, b)
to get both floor division and modulus in one call.
duration = 500
minutes, seconds = divmod(duration, 60)
print(f"{minutes}:{seconds}") # 8:20
Step 2: Chain divmod
for hours, minutes, and seconds.
duration = 9907
minutes, seconds = divmod(duration, 60)
hours, minutes = divmod(minutes, 60)
print(f"{hours}:{minutes:02d}:{seconds:02d}") # 2:46:07
Method 4: Handle Negative Numbers Correctly
Step 1: Check how //
rounds with negatives (it always rounds down toward negative infinity).
print(-5 / 2) # -2.5
print(-5 // 2) # -3 (floors down)
Step 2: Use int(x / y)
or math.trunc(x / y)
if you need truncation toward zero instead of flooring.
import math
print(int(-5 / 2)) # -2 (truncates toward zero)
print(math.trunc(-5/2))# -2
Step 3: Prefer //
only when floor behavior is required for negative results.
def pages_needed(total, per_page):
# Floors down even for negatives; safe for totals ≥ 0
return (total + per_page - 1) // per_page
Method 5: Update Values In-Place with //=
Step 1: Use //=
to floor-divide and assign back to the same variable.
x = 23
x //= 4
print(x) # 5
Step 2: Remember that mixing with floats returns a float.
y = 23
y //= 4.0
print(y, type(y)) # 5.0 <class 'float'>
Step 3: Confirm that the operator expresses intent clearly when the remainder isn’t needed.
batch = 137
batch //= 10 # number of full tens
print(batch) # 13
Quick tips:
//
floors;/
returns the exact quotient as a float.- With any float operand,
//
returns a float (but still floors the numeric result). - Use
divmod(a, b)
when you need both the quotient and remainder. - For negative values, be explicit about whether you want flooring (
//
) or truncation (int()
/math.trunc()
).
That’s the gist: reach for //
when you want the quotient rounded down, and keep divmod
in your toolkit when you also need the remainder.
Member discussion