While I was reviewing some code for a data analysis project when I noticed a fellow developer using the // operator in Python. While it may look like a comment syntax to beginners, it’s actually a powerful arithmetic operator called floor division.
In this article, I’ll explain exactly what the // operator does in Python, how it differs from regular division, and show you practical examples of when to use it.
Let’s get in!
What is Floor Division in Python?
Floor division (represented by the // operator) divides two numbers and rounds the result down to the nearest integer. It’s essentially division that chops off the decimal part, regardless of its value.
This is different from regular division (/), which returns a floating-point result with the decimal portion intact.
Here’s a simple example to illustrate the difference:
# Regular division
print(7 / 2) # Output: 3.5
# Floor division
print(7 // 2) # Output: 3As you can see, regular division gives us the exact result (3.5), while floor division rounds down to 3.
How Floor Division Works
Floor division follows a simple principle: divide the numbers and round down to the nearest integer. Let’s explore how this works with different types of numbers:
With Positive Numbers
When working with positive numbers, floor division simply discards the decimal part:
print(10 // 3) # Output: 3 (not 3.33...)
print(15 // 4) # Output: 3 (not 3.75)
print(20 // 5) # Output: 4 (exact division still works as expected)You can refer to the screenshot below to see the output.

With Negative Numbers
This is where floor division gets interesting. With negative numbers, “rounding down” means moving further into the negative direction:
print(-10 // 3) # Output: -4 (not -3.33...)
print(10 // -3) # Output: -4 (not -3.33...)
print(-10 // -3) # Output: 3 (not 3.33...)Notice how -10 // 3 gives -4, not -3. That’s because floor division rounds toward negative infinity, not toward zero.
Floor Division vs. Regular Division
Let’s compare floor division with regular division across different scenarios:
# Regular division always returns float
print(10 / 5) # Output: 2.0
print(10 / 3) # Output: 3.3333333333333335
# Floor division returns int with int operands
print(10 // 5) # Output: 2
print(10 // 3) # Output: 3
# With float operands, floor division returns float (but still rounds down)
print(10.0 // 3) # Output: 3.0
print(10 // 3.0) # Output: 3.0You can refer to the screenshot below to see the output.

The key differences are:
- Regular division (
/) always returns a float in Python 3 - Floor division (
//) returns an integer when both operands are integers - Floor division returns a float when at least one operand is a float
Practical Applications of Floor Division
Let me show you the practical applications of floor division.
Example 1: Convert Time Units
Imagine you’re building a fitness app that needs to convert seconds into minutes and seconds:
total_seconds = 125
# Calculate minutes and remaining seconds
minutes = total_seconds // 60 # Floor division to get whole minutes
seconds = total_seconds % 60 # Modulo to get remaining seconds
print(f"{total_seconds} seconds = {minutes} minutes and {seconds} seconds")
# Output: 125 seconds = 2 minutes and 5 secondsExample 2: Pagination
When building a website with pagination, floor division helps calculate the total number of pages needed:
total_items = 57
items_per_page = 10
# Calculate total pages needed
total_pages = (total_items + items_per_page - 1) // items_per_page
# Or more simply:
total_pages = -(-total_items // items_per_page) # Ceiling division trick
print(f"Need {total_pages} pages to display {total_items} items")
# Output: Need 6 pages to display 57 itemsYou can refer to the screenshot below to see the output.

Example 3: Array Chunking
Floor division is useful when breaking data into chunks:
def chunk_list(lst, chunk_size):
"""Split a list into chunks of specified size."""
return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)]
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chunks = chunk_list(data, 3)
print(chunks) # Output: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
# The number of chunks can be calculated with:
num_chunks = (len(data) + chunk_size - 1) // chunk_sizeFloor Division vs. Other Division Methods
Sometimes you might need different rounding behaviors. Here’s how to achieve them in Python:
import math
x = 10
y = 3
# Floor division (round down)
floor_result = x // y # 3
# Ceiling division (round up)
ceiling_result = -(-x // y) # 4
# Or using math.ceil:
ceiling_result = math.ceil(x / y) # 4
# Truncate division (round toward zero)
truncate_result = int(x / y) # 3
# Round to nearest integer
round_result = round(x / y) # 3Performance Considerations
Floor division is slightly faster than using alternatives like math.floor(x/y):
import timeit
import math
# Floor division timing
time_floor_op = timeit.timeit('10 // 3', number=1000000)
# math.floor timing
time_math_floor = timeit.timeit('math.floor(10 / 3)',
'import math', number=1000000)
print(f"Floor division: {time_floor_op:.6f} seconds")
print(f"math.floor(): {time_math_floor:.6f} seconds")You can refer to the screenshot below to see the output.

The floor division operator is more efficient because it’s a single operation, while math.floor() requires a division followed by a function call.
Common Mistakes and Pitfalls
Mistake 1: Confuse // with /
The most common mistake is confusing floor division with regular division, especially when precision matters:
# This calculates average correctly
average = sum(values) / len(values)
# This will give incorrect results for averages
wrong_average = sum(values) // len(values) # Don't do this!Mistake 2: Incorrect Negative Number Handling
Remember that floor division rounds toward negative infinity, not toward zero:
print(-7 // 2) # Output: -4, not -3If you want a division that truncates toward zero (like in C/C++), use int():
print(int(-7 / 2)) # Output: -3Python Version Differences
In Python 2, the / operator performed floor division when both operands were integers. In Python 3, / always performs true division, returning a float. The // operator was introduced to provide consistent floor division behavior across Python versions.
I hope this article has cleared up any confusion about the // operator in Python. Floor division might seem like a minor feature, but it’s incredibly useful in many programming scenarios where you need to work with whole numbers or implement specific division behaviors.
Remember that the key to floor division is that it always rounds down to the nearest integer, regardless of the decimal value. This makes it perfect for applications like pagination, time conversions, and array manipulation.
You may like to read some other tutorials:
- Use Static Variables in Python Functions
- Sort a List in Python Without Using the sort() Function
- Use the Pow() Method in Python
- Call Function by String Name in Python

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.