# Negative integer division surprising result

## Question or problem about Python programming:

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

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

what does this means?

## How to solve the problem:

### Solution 1:

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 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

### Solution 3:

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:

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

### Solution 5:

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