package ppx_decimal
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=604166799fb4f488548d1b539bb55f0b1d048a33473052eb2ceda9dc884aa61b
sha512=ac63f617930ac0bd6a33f1189d5f07cb74dba5befa5be08b517e6f6339eabc6e48a3d6e8f3fc8571b5a117bdfc5e89e3fc9feab2f463b8da9cc0089ed995f9a2
Description
A ppx rewriter for decimal literals using the decimal library.
Published: 01 Aug 2023
README
decimal
Arbitrary-precision floating-point decimal type implemented in OCaml. Ported from Python decimal
module. It uses Zarith to do biginteger arithmetic.
Opam: https://ocaml.org/p/decimal
License
This package is licensed under the Python Software Foundation License v2, for the sake of simplicity, as it is a derived work of the Python decimal
module.
Examples
See next section (below) for dune
instructions.
$ opam install decimal # if trying out
# (* if trying out: *)
#require "decimal";;
#require "ppx_decimal";;
# (* tell the REPL how to display decimals *)
#install_printer Decimal.pp;;
# (* PPX gives convenience literal syntax *)
Decimal.(0.1m + 0.2m);;
- : Decimal.t = 0.3
# (* default precision is 32 *)
Decimal.(of_int 1 / of_int 3);;
- : Decimal.t = 0.33333333333333333333333333333333
# (* round to decimal places: *)
Decimal.(round ~n:2 (of_int 22 / of_int 7));;
- : Decimal.t = 3.14
Use with dune
In your dune
file's executable
or similar stanza:
(libraries decimal)
(preprocess (pps ppx_decimal))
Dev
Build:
dune build
Try in REPL:
dune utop
Tests
The test runner source is in test/decimal_test.ml
. It parses and runs the test cases in test/data/
. I am adding test case data files from the Python snapshot as I go.
Run current tests:
dune test
Note that, some of the tests don't make sense for the OCaml port and have thus been deleted. If you ever need to update to new versions of the test files, you can apply the changes as patches after re-dowloading the relevant *.decTest
files:
git show 07074859567e936b8d170aba5ef58889a4d9d467 | git apply
git show ae0196377fb7a99db7f198f2fb242e6a2fe4541e | git apply