4个版本
0.2.1 | 2020年8月28日 |
---|---|
0.2.0 | 2020年7月3日 |
0.1.1 | 2020年5月13日 |
0.1.0 | 2020年5月6日 |
#1088 in 编码
315KB
6.5K SLoC
pgnumeric
用Rust编写的任意精度数值实现,与PostgreSQL的数值兼容。
参阅: PostgreSQL任意精度数字
此crate提供了两种类型, NumericBuf
和 Numeric
。
可选功能
serde
当此可选依赖项启用时, NumericBuf
和 Numeric
实现了 serde::Serialize
和 serde::Deserialize
特性。
用法
要构建一个数值,使用 NumericBuf
use pgnumeric::NumericBuf;
let n1: NumericBuf = "123".parse().unwrap();
let n2: NumericBuf = "456".parse().unwrap();
let result = n1 + n2;
assert_eq!(result.to_string(), "579");
从Rust原始类型构建数值
use pgnumeric::NumericBuf;
let n1: NumericBuf = From::from(123_i32);
let n2: NumericBuf = From::from(456_i32);
let result = n1 + n2;
assert_eq!(result, Into::<NumericBuf>::into(579_i32));
数值支持高精度算术运算。
use pgnumeric::NumericBuf;
let n1: NumericBuf = "123456789.987654321".parse().unwrap();
let n2: NumericBuf = "987654321.123456789".parse().unwrap();
let result = n1 * n2;
assert_eq!(result.to_string(), "121932632103337905.662094193112635269");
let n3 = "170141183460469231731687303715884105727".parse::<NumericBuf>().unwrap();
assert_eq!(n3.sqrt().to_string(), "13043817825332782212")
数值可以被序列化为字节数组并从字节数组反序列化。
use pgnumeric::{NumericBuf, Numeric};
let n1 = "123456789.987654321".parse::<NumericBuf>().unwrap();
let bytes = n1.as_bytes();
let n2 = unsafe { Numeric::from_bytes_unchecked(bytes) };
assert_eq!(n1, n2);
Rust版本要求
pgnumeric
在rust 1.43
上工作。
许可证
此项目采用Apache-2.0许可证 (LICENSE 或 http://www.apache.org/licenses/LICENSE-2.0)。
贡献
除非您明确声明,否则您有意提交给 pgnumeric
的任何贡献,都应按Apache-2.0许可证授权,无任何附加条款或条件。
依赖关系
~105–305KB