94

How can I divide two numbers in Python 2.7 and get the result with decimals?

I don't get it why there is difference:

in Python 3:

>>> 20/15
1.3333333333333333

in Python 2:

>>> 20/15
1

Isn't this a modulo actually?

5

4 Answers 4

138

In Python 2.7, the / operator is integer division if inputs are integers.

If you want float division (which is something I always prefer), just use this special import:

from __future__ import division

See it here:

>>> 7 / 2
3
>>> from __future__ import division
>>> 7 / 2
3.5
>>>

Integer division is achieved by using //, and modulo by using %:

>>> 7 % 2
1
>>> 7 // 2
3
>>>

As commented by user2357112, this import has to be done before any other normal import.

Sign up to request clarification or add additional context in comments.

8 Comments

It's worth noting that future statements have to appear before any other code in a module, particularly before non-future imports. Also, import __future__ doesn't work.
Nice. Using __future__ is almost always the recommended way
@dumbledad, it is more readable, concise and intuitive
Interesting - I do not find it more intuitive. If I know that / is integer division and the result has decimals I would be taken by suprise, and the from __future__ import division may be more than a screenful away.
Well, it is somehow subjective, but for me, coming from other languages, it was confusing that dividing 3/2==1. Many people may agree, because float division is the default in python 3
|
67

In Python 3, / is float division

In Python 2, / is integer division (assuming int inputs)

In both 2 and 3, // is integer division

(To get float division in Python 2 requires either of the operands be a float, either as 20. or float(20))

1 Comment

Thanks for the paranthetical -- it was what I was curious about.
17

In Python 2.x, make sure to have at least one operand of your division in float. Multiple ways you may achieve this as the following examples:

20. / 15
20 / float(15)

Comments

12

"/" is integer division in Python 2, so it is going to round to a whole number. If you would like a decimal returned, just change the type of one of the inputs to float:

float(20)/15 #1.33333333

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.