tags:

views:

247

answers:

4
>>> numerator = 29
>>> denom = 1009
>>> print str(float(numerator/denom))
0.0

I just want it to return a decimal...

+8  A: 

Until version 3, Python's division operator, /, behaved like C's division operator when presented with two integer arguments: it returns an integer result that's truncated down when there would be a fractional part. See: PEP 238

>>> n = 29
>>> d = 1009
>>> print str(float(n)/d)
0.0287413280476

In python 2 (and maybe earlier) you could use:

>>> from __future__ import division
>>> n/d
0.028741328047571853
The MYYN
+3  A: 

In Python 2.x, division works like it does in C-like languages: if both arguments are integers, the result is truncated to an integer, so 29/1009 is 0. 0 as a float is 0.0. To fix it, cast to a float before dividing:

print str(float(numerator)/denominator)

In Python 3.x, the division acts more naturally, so you'll get the correct mathematical result (within floating-point error).

Adam Rosenfield
A: 
print str(float(numerator)/float(denom))
inspectorG4dget
It's sufficient to cast either of the operands to float(). I generally recommend casting the numerator as it locates the cast at the beginning of the expression where readers will normally see it more readily.
Jim Dennis
Yes it is, but this seemed more "proper" to me just because it was more transparent in its casting. But yes, casting one alone is enough.
inspectorG4dget
A: 

In your evaluation you are casting the result, you need to instead cast the operands.

Recursion