> >
> > >>> print "%10.3f" % 1.2345    # seems like a bug
> >
> >      1.234
> >
> > the first one, print knows enough to recognize and print it as 1.2345.
> > however, in the second line, when it is round off, it doesn't know it
> > is 1.2345 any more.

That is because it isn't 1.2345 anymore. 1.2345 cannot be represented
exactly in radix-2 floating point arithmetic.

> I think maybe this is the reason:  the first one, print will print it
> out with a rounding to the 11th decimal point, therefore hiding any
> floating point imperfection.
>
> however, in the second one, print will not first round it off to the
> 11th decimal point with a subsequent rounding off to the 3rd decimal
> point.  In that case, the floating point imperfection is manifested.
> (by thinking it is 1.2344999999999999)
>
> a question is:  since print can nicely hide and smooth out the floating
> point imperfection, and probably most people prefer it that way, how

I wouldn't prefer it that way. ;)

> come the implementation of print "%10.3f" doesn't also do that --
> eliminating the imperfection first, and then print it out accordingly.
> I think one argument is the loss of precision, but we only print it,
> rather than modify the number or the variable itself...   hm... say, if
> a bank uses python to print out the "change that should be returned to
> the customer" using print "%20.2f", then there will be a cent missing
> here and there...  why not smooth out that imperfection and return that
> penny to the customer?  (not that they really care).

The decimal module will do what you want. One of its primary
motivations was correct rounding for financial activities.

casevh

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to