This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

What library to use for arbitrary precision decimals
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 2006-02-19 (16:53) From: Brian Hurt Subject: Re: [Caml-list] What library to use for arbitrary precision decimals
```

On Sun, 19 Feb 2006, Richard Jones wrote:

>
> Before we go too far down the currency track (where I agree, using
> integers is the way to go), my actual requirement is for a natural
> OCaml mapping for the PostgreSQL NUMERIC/DECIMAL type:
>
> http://www.postgresql.org/docs/current/interactive/datatype.html#DATATYPE-NUMERIC-DECIMAL
>
> The database can define types like NUMERIC(6,4) which means 6 decimal
> digits in total, 4 of them after the decimal point -- for example,
> 12.3456

Hmm.  There are problems definin that library.  What are the semantics?
If I add a NUMERIC(6,4) (2 digits to the left of the point and 4 to the
righ) and a NUMERIC(7,2) (5 digits to the left of the point and 2 to the
right), what precision is the result?  NUMERIC(4,2) (2 digits to the left
of the point and 2 to the right)?  NUMERIC(9,4) (5 digits to the left of
the point and 4 digits to the right)?  How does roundoff work?  If I take
the NUMERIC(6,4) number 62.0000 and multiply it by the NUMERIC(6,4) number
02.0000, what answer do I get?  The NUMERIC(6,4) number 24.000?  The
NUMERIC(7,4) number 124.000?  Or does it throw an exception?

>
> There doesn't seem to me to be a good natural map for this type in the
> stdlib.

If decimal roundoff isn't important, I'd be tempted to go for floats.  I
don't know if this is true or not.

Brian

```