Inconsistent results from int(floatNumber)

gershar gerrysttn at gmail.com
Tue Oct 26 15:07:55 CEST 2010


On Oct 25, 5:44 pm, gershar <gerrys... at gmail.com> wrote:
> I had some problems with some Python projects that gave variable
> results that I could not track down. Eventually and reluctantly I
> converted them to Java. Later, when I had more time I tried to analyze
> what the Python code was doing and found something strange. The
> following snippet illustrates the problem.
>
> >>> i = -50.0
> >>> for x in xrange(5):
>
>         i += 0.1
>         z = i * 10.0
>         print
>         print z
>         print int(z)
>
> -499.0
> -499
>
> -498.0
> -498
>
> -497.0
> -496
>
> -496.0
> -495
>
> -495.0
> -494
>
> The first two iterations look OK but after that the int(z) function
> returns the wrong value. It looks like the value was rounded down.  If
> a just do this:>>> int(-497.0)
>
> -497
> I get the value I expect.
> So what is the problem?
>
> It looks like a rounding problem but on the surface there is nothing
> to round. I am aware that there are rounding limitations with floating
> point arithmetic but the value passed to int() is always correct. What
> would cause it to be off by 1 full digit in only some cases? Perhaps
> something behind the scenes in the bowels of the interpreter ?.
>
> I could not get the thing to fail without being inside the for loop;
> does that have something to do with it?
>
> To fix the problem I could use round() or math.floor().  Like this.
>
> >>> i = -50.0
> >>> for x in xrange(5):
>
>         i += 0.1
>         z = i * 10.0
>         print
>         print z
>         print(round(z))
>
> -499.0
> -499.0
>
> -498.0
> -498.0
>
> -497.0
> -497.0
>
> -496.0
> -496.0
>
> -495.0
> -495.0
>
> Why should I have to do this?
>
> Is there a general rule of thumb to know when this could be a problem?
>
> Should any float-to-int conversion be suspect?
>
> The above code was run in Python 2.5.4 on WinXP and Python 2.6.2 on
> Linux(Fedora12)
> Can anyone verify if this would be the same on 3.x?

Good responses from this group!
Thanks for the insight

Regards



More information about the Python-list mailing list