:b: bigdecimal
A library for arbitrary precision decimal arithmetic in Gleam.
This library builds on the excellent bigi library, which is used
to represent the unscaled value of BigDecimal
s.
A BigDecimal
consists of an arbitrary precision integer unscaled value of type bigi.Bigint
and an integer scale of built-in type Int
(arbitrary precision on the Erlang target, bound between
Number.MIN_SAFE_INTEGER
and Number.MAX_SAFE_INTEGER
on the JavaScript target). If zero or positive, the scale is the number of digits to the right of
the decimal point. If negative, the unscaled value of the number is multiplied by ten to the power
of the negation of the scale. The value of the number represented by the BigDecimal
is therefore
unscaled_value × 10-scale.
Usage
gleam add bigdecimal@1
import bigdecimal
pub fn main() {
let assert Ok(number) = bigdecimal.from_string("12.00340")
bigdecimal.scale(of: number) // 5
bigdecimal.unscaled_value(of: number) // 1_200_340
}
Further documentation can be found at https://hexdocs.pm/bigdecimal.
Development
The library supports all targets and runtimes. To do a matrix run of the test suite, run:
./scripts/matrix-test.sh
TODO
Pre v1
- absolute value
- compare
- add
- subtract
- multiply
- product (list input)
- sum (list input)
- signum
- ulp
- power
- rescale/round (with rounding modes)
- clamp
- divide
Post v1
- modulo
- square root
- trim trailing zeros
- truncate (to BigInt)