Why not FP for Money?
Robert Brewer
fumanchu at amor.org
Fri Sep 24 21:52:38 EDT 2004
Jeff Shannon wrote:
> Carlos Ribeiro wrote:
>
> >A last note: unless dictated by context otherwise, I think
> that adding
> >two fixed point numbers should round/truncate to the smallest number
> >of decimal places, as in:
> >
> >12.34d + 10.001d --> 32.34
> >
> >
>
> Personally, I think that it makes the most sense (i.e., will
> result in
> the fewest surprises) if the greatest possible number of places is
> preserved. If you truncate decimal places, then you might get this:
>
> x = 1.1d
> for _ in range(5):
> x += 0.02d
> print x ----> 1.1d
>
> Each addition of 0.02 to 1.1 yields 1.12, which is truncated back to
> 1.1, which leaves us in the same place that integer division did. I
> think it's pretty clear that this *should* produce 1.2. In
> order to do
> that, you need to preserve the largest number of decimal places.
That would certainly keep Decimal objects from becoming the default
number type in Python 3.0. But if a suffixed "d" is retained, it becomes
Yet Another Thing To Learn, not unlike the current surprises with
floating-point.
The "end-user" would have to be more explicit in order to achieve the
desired behavior:
x = 1.10d # Notice the trailing 0
for _ in range(5):
x += 0.02d
print x ----> 1.20d
In the case of using Decimals as a Money type, this wouldn't be much of
a burden on any society with a decimalized currency (IMO); it's standard
practice to write the trailing zero.
Robert Brewer
MIS
Amor Ministries
fumanchu at amor.org
More information about the Python-list
mailing list