Arbitrary precision numeric implementation written in Rust, compatible with PostgreSQL's numeric.
See also: PostgreSQL Arbitrary Precision Numbers
This crate provides two types, NumericBuf
and Numeric
.
serde
When this optional dependency is enabled, NumericBuf
and Numeric
implement the serde::Serialize
and serde::Deserialize
traits.
To build a numeric, use NumericBuf
:
```Rust use pgnumeric::NumericBuf;
let n1: NumericBuf = "123".parse().unwrap(); let n2: NumericBuf = "456".parse().unwrap(); let result = n1 + n2; asserteq!(result.tostring(), "579"); ```
To build a numeric from Rust primitive types:
```Rust use pgnumeric::NumericBuf;
let n1: NumericBuf = From::from(123i32);
let n2: NumericBuf = From::from(456i32);
let result = n1 + n2;
asserteq!(result, Into::
Numeric supports high precision arithmetic operations.
```Rust use pgnumeric::NumericBuf;
let n1: NumericBuf = "123456789.987654321".parse().unwrap(); let n2: NumericBuf = "987654321.123456789".parse().unwrap(); let result = n1 * n2; asserteq!(result.tostring(), "121932632103337905.662094193112635269");
let n3 = "170141183460469231731687303715884105727".parse::
Numeric can be serialized to bytes slice and deserialized from bytes slice.
```Rust use pgnumeric::{NumericBuf, Numeric};
let n1 = "123456789.987654321".parse::
pgnumeric
works on rust 1.43
.
This project is licensed under the Apache-2.0 license (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in pgnumeric
by you, shall be licensed as Apache-2.0, without any additional
terms or conditions.