Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 2/2 1.0
Is this intended? I strongly remember earlier versions returning
int/int=int? What should I do, is there a new division operator or must I always cast?
Take a look at PEP-238: Changing the Division Operator
The // operator will be available to request floor division unambiguously.
Oops, immediately found
The accepted answer already mentions PEP 238. I just want to add a quick look behind the scenes for those interested in what’s going on without reading the whole PEP.
Python maps operators like
/ to special functions, such that e.g.
a + b is equivalent to
Regarding division in Python 2, there is by default only
/ which maps to
__div__ and the result is dependent on the input types (e.g.
Python 2.2 introduced the
division, which changed the division semantics the following way (TL;DR of PEP 238):
__truediv__which must “return a reasonable approximation of
the mathematical result of the division” (quote from PEP 238)
__floordiv__, which should return the floored result of
With Python 3.0, the changes of PEP 238 became the default behaviour and there is no more special method
__div__ in Python’s object model.
If you want to use the same code in Python 2 and Python 3 use
from __future__ import division
and stick to the PEP 238 semantics of
Hope it might help someone instantly.
Behavior of Division Operator in Python 2.7 and Python 3
In Python 2.7: By default, division operator will return integer output.
to get the result in double multiple 1.0 to “dividend or divisor”
100/35 => 2 #(Expected is 2.857142857142857) (100*1.0)/35 => 2.857142857142857 100/(35*1.0) => 2.857142857142857
In Python 3
// => used for integer output / => used for double output 100/35 => 2.857142857142857 100//35 => 2 100.//35 => 2.0 # floating-point result if divsor or dividend real