#decimal #contracts #soroban #i128 #atomic #place #percent

soroban-decimal

为 Soroban 合约提供精确的小数算术包

2 个稳定版本

新版本 1.1.0 2024 年 8 月 27 日
1.0.0 2024 年 5 月 8 日

#5#i128

GPL-3.0 许可

78KB
1.5K SLoC

Soroban Decimal

此代码来自 cosmwasm-std crate,该crate采用 Apache License 2.0 许可。该合约提供了一个 Decimal 结构体,用于算术操作,适合区块链 De-Fi 操作,其中精度至关重要。它确保计算精确到 18 位小数。

Decimal(i128)

方法

  • new(value: i128) -> Self:创建一个新的 Decimal。
  • raw(value: i128) -> Self:从 i128 返回原始值。
  • one() -> Self:创建一个 1.0 Decimal。
  • zero() -> Self:创建一个 0.0 Decimal。
  • percent(x: i64) -> Self:将 x% 转换为 Decimal。
  • permille(x: i64) -> Self:将千分比 (x/1000) 转换为 Decimal。
  • bps(x: i64) -> Self: 将基点(bps)(x/10000)转换为十进制。
  • from_atomics(atomics: i128, decimal_places: i32) -> Self: 从原子单位和小数位数创建一个十进制数。
  • inv(&self) -> Option<Self>: 返回十进制数 d 的乘法逆元 1/d
  • from_ratio(numerator: impl Into<i128>, denominator: impl Into<i128>) -> Self: 返回以十进制形式表示的比值(分子 / 分母)。
  • abs(&self) -> Self: 返回十进制的绝对值。
  • to_string(&self, env: &Env) -> String: 将十进制转换为字符串。

Decimal256

方法

  • new(value: u128) -> Self: 创建一个新的十进制数。
  • raw(value: u128) -> Self: 从 u128 返回原始值。
  • one() -> Self:创建一个 1.0 Decimal。
  • zero() -> Self:创建一个 0.0 Decimal。
  • percent(x: u64) -> Self: 将 x% 转换为十进制。
  • permille(x: u64) -> Self: 将千分比 (x/1000) 转换为十进制。
  • bps(x: u64) -> Self: 将基点 (x/10000) 转换为十进制。
  • from_atomics(atomics: u128, decimal_places: i32) -> Self: 从原子单位和小数位数创建十进制。
  • inv(&self) -> Option<Self>: 返回十进制数 d 的乘法逆元 1/d
  • from_ratio(numerator: impl Into<U256>, denominator: impl Into<U256>) -> Self: 返回比(分子/分母)作为十进制。
  • abs(&self) -> Self: 返回十进制的绝对值。
  • to_string(&self, env: &Env) -> String: 将十进制转换为字符串。

注意:当前 from_atomics(atomics: u128, decimal_places: i32) -> Self 支持 38 的最大 decimal_places

依赖关系

~11–14MB
~299K SLoC