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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.