# Why not FP for Money?

Robert Brewer fumanchu at amor.org
Sat Sep 25 03:52:38 CEST 2004

```Jeff Shannon wrote:
> Carlos Ribeiro wrote:
>
> >A last note: unless dictated by context otherwise, I think
> >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

```