:b: bigdecimal

Package Version Hex Docs Erlang Target JavaScript Target

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 BigDecimals. 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

Search Document