float safety clarification
John W. Baxter
jwbnews at scandaroon.com
Mon Jun 26 11:35:39 EDT 2000
In article <Pine.BSF.4.10.10006260856360.16661-100000 at chi.pair.com>,
Michal Wallace <sabren at manifestation.com> wrote:
> Hey all,
>
> I'm building a shopping cart, so I want to be able to store and work
> with prices. I've always been told that you shouldn't use floats for
> money. From past discussions here, I even understand why floats can be
> inaccurate... But in actually trying it out, I can't seem to produce
> any real-world situations relevant to my cart where using floats would
> screw me up... I guess I'm asking for a sanity check here.
>
> Are floats safe to use for money values if you're only going to be
> adding and subtracting them, or multiplying them?
>
> I tried this:
>
> >>> for x in range(100):
> ... print "%.2f" % (float(x)/100),
>
> And it looks right. I haven't gotten any funny results with just
> adding or subtracting..
>
> Here are the operations I need to perform:
>
> - assign a price
> - multiply price by (whole number) quantity
> - add a bunch of prices together
> - calculate a sales tax
> - possibly some day give a percent discount
>
> I thought sales tax might be a problem, but I haven't been able to
> come up with a problem where a percent sales tax represented as a
> float causes any float problems, either.
>
> Basically, I can't find a reason not to use floats.
> Am I asking for trouble?
>
> Cheers,
>
> - Michal
You'll probably be OK as long as you don't compare (with 0.00, or with
any other specific value). Are you doing something like offering free
shipping on orders of $100 or more? Comparison against 100 or 100.00
could produce a wrong answer if the sum of the items is slightly less
than 100. Same for free shipping "over $100"...you might have a total
"equal" to 100 for which sum > 100.00 is true (less bad: you aren't
failing to give something you should have, landing in FTC hell).
I wouldn't do it...I see no reason to work with decimal money with a
method which expresses only 4% of the possible 100 different cents
values exactly (.00, .25, .50, .75).
--John
--
John W. Baxter Port Ludlow, WA USA jwbnews at scandaroon.com
More information about the Python-list
mailing list