Happy to announce that `decimal`

0.2.1 has been pubished on opam.

`decimal`

is a port of Python’s `decimal`

module to OCaml and implements the General Decimal Arithmetic Specification. However note that it is a port in progress–basic arithmetic and rounding functions have been ported, but I am still working on powers and logs. The ported functions pass the same unit test suite that the Python version does (with some minor modifications).

Another caveat: currently the library is only supported on 64-bit architectures due to (exponent) overflow issues on 32-bit. If anyone is willing to test and fix overflows on 32-bit, I am more than happy to accept PRs.

Here’s an example of using the module:

```
(* Rosetta Code Currency Example *)
(* Demo purposes, normally you'd prefix module name or local open *)
open Decimal
let hamburger_qty = of_string "4_000_000_000_000_000"
let hamburger_amt = of_string "5.50"
let milkshake_qty = of_int 2
let milkshake_amt = of_string "2.86"
(* Shortcut to divide 7.65 by 100 *)
let tax_rate = of_string "7.65e-2"
let subtotal = hamburger_qty * hamburger_amt + milkshake_qty * milkshake_amt
let tax = round ~n:2 (subtotal * tax_rate)
let total = subtotal + tax
let () = Format.printf "Subtotal: %a
Tax: %a
Total: %a\n" pp subtotal pp tax pp total
```

You can get the package with: `opam install decimal`

. Minimum OCaml version 4.08.