6 个版本
0.1.5 | 2023年10月4日 |
---|---|
0.1.4 | 2023年10月4日 |
#2810 in 魔法豆
每月 22 次下载
14KB
337 行
soroban_decimal_numbers
这是一个用于 Rust 中处理小数点数字的工具,适用于 no_std
。它专为 Soroban 智能合约设计,但如需可在任何地方使用。
背后的动机是 Soroban 不支持小数点数字。
安装
cargo add soroban_decimal_numbers
使用方法
您可以将 测试文件 作为参考。以下是一些示例
use soroban_decimal_numbers::DecimalNumberWrapper;
fn main() {
let a = DecimalNumberWrapper::new("34.56");
let b = DecimalNumberWrapper::new("12.34");
assert!(DecimalNumberWrapper::add(a, b).as_tuple() == (46, 900));
assert!(DecimalNumberWrapper::sub(a, b).as_tuple() == (22, 220));
assert!(DecimalNumberWrapper::mul(a, b).as_tuple() == (426, 470));
assert!(DecimalNumberWrapper::div(a, b).as_tuple() == (2, 800));
assert!(DecimalNumberWrapper::cmp(a, b) == 1);
assert!(DecimalNumberWrapper::cmp(b, a) == 2);
assert!(DecimalNumberWrapper::cmp(a, a) == 0);
}
约束条件
此工具处于开发初期。未来可能会有更多的发展。
它使用最多3位小数的小数数字。目前此值是硬编码的,但将来可能被参数化。请注意,如果您的计算超出此约束,您将失去精度。例如,如果您尝试计算 12.34/34.56
,结果为 0.35706018518
,您将得到 0.357
- 它只是截断结果,所以操作是 floor
,而不是 round
或其他类似操作。
目前不支持负数。如果您执行会导致负数的减法操作(例如 3-5
),结果将是 0
。
请在使用元组表示时小心。您需要提供所有带小数的数字。如果您想表示例如 1.2
,您需要这样做:DecimalNumberWrapper::from((1, 200))
,如果您这样做 DecimalNumberWrapper::from((1, 2))
,您将得到 1.002
。强烈推荐初始化数字的方法是使用字符串切片:DecimalNumberWrapper::from("1.2");
。