<cal.leeming@simplicitymedialtd.co.uk> wrote:
> So, today I was confused why on earth dividing two ints (which leaves a
> remainder), didn't return back an int.
> In the end, I re-casted the ints as floats, performed the division, and this
> worked fine.
> Looked through the docs, and found this:
> http://docs.python.org/library/stdtypes.html
> "For (plain or long) integer division, the result is an integer. The result
> is always rounded towards minus infinity: 1/2 is 0, (-1)/2 is -1, 1/(-2) is
> -1, and (-1)/(-2) is 0. Note that the result is a long integer if either
> operand is a long integer, regardless of the numeric value."
> Has anyone else come up against this gotcha before? I'm wondering if it's
> better practise to always cast a number as a float/decimal, rather than an
> int.
> Any thoughts guys?
> Cal
Bit OT, but I'll bite (doesn't really relate to Django). Dividing two
ints ALWAYS returns an int. Calling math.ceil() ALWAYS returns a
float. I think you were expecting that python would automagically
store the remainder somewhere so that math.ceil() has something to
operate on. It doesn't do that!
If you wish to do rounding, convert either operand to a float. The
'Note that the result is a long integer if either operand is a long
integer' is referring to dividing two integral types - if either is a
long, the result will be a long. It doesn't apply if either operand is
a float, eg if you divide a float by a long, the result is a float,
not a long.
Cheers
Tom
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment