Question about typing: ints/floats

MRAB python at mrabarnett.plus.com
Wed Mar 3 20:28:25 EST 2010


Zeeshan Quireshi wrote:
> On Mar 3, 6:45 pm, Wells <thewellsoli... at gmail.com> wrote:
>> This seems sort of odd to me:
>>
>>>>> a = 1
>>>>> a += 1.202
>>>>> a
>> 2.202
>>
>> Indicates that 'a' was an int that was implicitly casted to a float.
>> But:
>>
>>>>> a = 1
>>>>> b = 3
>>>>> a / b
>> 0
>>
>> This does not implicitly do the casting, it treats 'a' and 'b' as
>> integers, and the result as well. Changing 'b' to 3.0 will yield a
>> float as a result (0.33333333333333331)
>>
>> Is there some way to explain the consistency here? Does python
>> implicitly change the casting when you add variables of a different
>> numeric type?
>>
>> Anyway, just  curiosity more than anything else. Thanks!
> 
> Python, like most other languages performs only integer division when
> both the operands are ints. So only if one of the types is a flot or
> you explicitly cast your expression to be a double, then the value
> will be a fraction. otherwise you will the quotient.

int + int gives int
float + float gives float
int + float gives float
float + int gives float

Similarly for '-' and '*'.

Division causes a problem because what is int / int? Should it behave
like the others and give an int? That would mean that 1 / 2 == 0, which
can be confusing for newbies.

In older languages (Fortran, for example) integer divided by integer
using the normal division operator '/' was integer, and this is what C
and those influenced by it do.

Newer languages return a float instead of an integer because it causes
less confusion (1 / 2 == 0.5 is less confusing than 1 / 2 == 0), but
also provide a special integer division operator.

In Python v2.x '/' does integer division, but from Python v3.x '/' does
float division and uses '//' for integer division. ('//' is also
available in later versions of 2.x.)



More information about the Python-list mailing list