Negative integer division surprising result

PythonDivisionInteger Division

Python Problem Overview


In my application I encountered the following and was surprised by the results:

8/-7=-2 (both integers).

What does this mean?

Python Solutions


Solution 1 - Python

For the actual values, i.e. 8.0/(-7.0), the result is roughly -1.143.

Your result using integer division is being rounded down toward the more negative value of -2. (This is also known as "Floor division")

This is why you will get the somewhat perplexing answers of:

>>> 8/(-7)
-2
>>> 8/7
1

Note: This is "fixed" in Python 3, where the result of 8/(-7) would be -1.143. So if you have no reason to be using Python 2, you should upgrade. ;)

In Python 3, if you still want integer division, you can use the // operator. This will give you the same answer as 8/(-7) would in Python 2.

Here's a Python Enhancement Proposal on the subject: PEP 238 -- Changing the Division Operator

Solution 2 - Python

Python always does the "floor division" for both negative numbers division and positive numbers division.

That is

1/10 = 0
1/-10 = -1

But sometime we need 1/-10 to be 0

I figure out it can be done by using the float division first then cast result to int, e.g.

int(float(1)/-10) = 0

That works fine for me, no need to import the future division or upgrade to Python 3

Hope it can help you~

Solution 3 - Python

To have Python automatically convert integer division to float, you can use:

from __future__ import division

Now:

8/-7=-1.1428571428571428

This feature is not in the standard Python 2 not to break existing code that relied on integer division.

However, this is the default behavior for Python 3.

Solution 4 - Python

When both values are integers when dividing Python uses Floor division.

Solution 5 - Python

In Python, / operator is for integer division. You can look at it as float division followed by a floor operation.

For example,

> 8/7 == floor(8.0/7.0) == 1 > > 8/-7 == floor(8.0/-7.0) == -2

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVivek SView Question on Stackoverflow
Solution 1 - PythonChris CooperView Answer on Stackoverflow
Solution 2 - PythonZH.JayView Answer on Stackoverflow
Solution 3 - PythonAndrea ZoncaView Answer on Stackoverflow
Solution 4 - PythonLossyView Answer on Stackoverflow
Solution 5 - PythonRumple StiltskinView Answer on Stackoverflow