comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: Floating Decimal Package/Library?
Date: Wed, 17 Jul 2002 12:30:36 -0400
Date: 2002-07-17T12:30:36-04:00	[thread overview]
Message-ID: <3D359BAC.9070006@cogeco.ca> (raw)
In-Reply-To: 6A6Z8.32985$Wt3.29013@rwcrnsc53

tmoran@acm.org wrote:

>>Since Turkish Lira have been mentioned, when one tries to directly
>>calculate currency equivalents based on the exchange rate
>>
>   Using Gnat, the program:
> with Ada.Text_IO;
> with Ada.Text_IO.Editing;
> procedure Turk is
>   type Turkish is delta 0.01 digits 18;
>   type US is delta 0.01 digits 18;
> 
>   package Turkish_Output is new Ada.Text_IO.Editing.Decimal_Output(Turkish);
>   package US_Output is new Ada.Text_IO.Editing.Decimal_Output(US);
> 
>   Money_Pic: constant Ada.Text_IO.Editing.Picture
>     := Ada.Text_IO.Editing.To_Picture("-$$_$$$_$$$_$$$_$$$_$$9.99");
> 
>   Dollars : US := 3_300_000_000.00;
>   Lira    : Turkish;
> 
> begin
>   Lira := Turkish(Dollars * 1097213.08);
>   Ada.Text_IO.Put_Line(US_Output.Image(Dollars, Money_Pic)
>                        & Turkish_Output.Image(Lira, Money_Pic));
> end Turk;
>   produced:
>          $3,300,000,000.00 $3,620,803,164,000,000.00
> Perhaps the IMF's accounting department has a library to go higher, but
> $3.3 billion should satisfy most of the rest of us.


Not true. Look at mutual fund holdings, or your bank's, or
pension funds. To deal with these kinds of issues, INFORMIX
and Oracle (for example) do supply businesses with Decimal
library routines for use in applications. This allows them
to accurately deal with the precision and exactness of
the values involved. Accountants and auditors just
blink at you when you try to explain about binary
floating point "error". 8-)

The example above shows the currency to only 2 decimal 

places and already 

uses 18 digits. We typically use 4 or more decimal places,
because not all currencies are held to 2 decimal places
(especially after conversion). In light of the example above,
we already need 20-22 digits.

Someone else suggested "why not keep all amounts in

dollars?"  There are numerous situations where this doesn't
work well. One is when you buy a security (stock) on an
exchange: you keep on record what you paid for it -- in
the currency of that trade. You keep the exchange rate
history in a separate table. If you store the trade price
amount in dollars, you mix exchange rate and price
in one value. This can lead to precision errors (at least
for some data types and precision ranges), and it makes
life much more complicated for your software. Imagine that
the dollar amount is incorrect because the exchange rate
was wrong. Now you have to find all trades in that currency,
divide out the wrong exchange rate, multiply in the new.
Very messy, and the very sort of things that make programmers
and auditors alike, cringe.

It is much purer as a data model to store price and
exchange rate separately and perform currency
conversions only when required. This way, if your trade
was done in Liras, the amount will be reported on the
report precisely, and you can still compute holdings
in Canadian or US currency on demand.

Warren.





  reply	other threads:[~2002-07-17 16:30 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-07-12 17:19 Floating Decimal Package/Library? Warren W. Gay VE3WWG
2002-07-12 22:58 ` Robert Wessel
2002-07-12 23:30   ` Dann Corbit
2002-07-15 13:34     ` Warren W. Gay VE3WWG
2002-07-16  5:04       ` Robert C. Leif
2002-07-16  7:01         ` tmoran
2002-07-16 15:50           ` Robert C. Leif
2002-07-17  1:24             ` tmoran
2002-07-17  2:53               ` Robert C. Leif
2002-07-17  4:41                 ` tmoran
2002-07-17 16:30                   ` Warren W. Gay VE3WWG [this message]
2002-07-17 22:09                     ` tmoran
2002-07-29 17:05                       ` Warren W. Gay VE3WWG
2002-07-29 17:41                         ` tmoran
2002-07-30  8:58                           ` Jean-Pierre Rosen
2002-07-30 16:20                           ` John H. Lindsay
2002-07-16 16:32           ` Pascal Obry
2002-07-16 17:53           ` Warren W. Gay VE3WWG
2002-07-17  1:24             ` tmoran
2002-07-17  8:28               ` Vadim Godunko
2002-07-17 13:32                 ` Warren W. Gay VE3WWG
2002-07-22 23:33                   ` Robert I. Eachus
2002-07-23 13:16                     ` Marin David Condic
2002-07-24 15:18                       ` Darren New
2002-07-24 15:43                         ` Hyman Rosen
2002-07-24 16:17                         ` Fraser Wilson
2002-07-17 13:30               ` Warren W. Gay VE3WWG
2002-07-13 21:55 ` Björn Lundin
2002-07-15 13:37   ` Warren W. Gay VE3WWG
2002-07-17 21:56 ` Waldek Hebisch
2002-07-18 14:13   ` Robert C. Leif
2002-07-19 14:41     ` Waldek Hebisch
2002-07-19 17:29   ` Warren W. Gay VE3WWG
2002-07-19 21:50     ` Waldek Hebisch
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox