固定小数点数库提供了在 Sway 中使用固定小数点数的库。它有 3 种不同的无符号类型:UFP32
、UFP64
和UFP128
,以及 3 种有符号类型IFP64
、IFP128
和IFP256
。这些类型是栈分配的。
这种类型在底层存储为u32
、u64
或U128
。因此,大小可以在编译时知道,长度是静态的。
有关固定小数点数库的实现详细信息,请参阅Sway Libs 文档 。
要使用固定小数点数库,必须将 Sway Libs 添加到Forc.toml
文件中,然后将其导入到您的 Sway 项目中。要将 Sway Libs 添加为项目的依赖项,请参阅入门 。
要将固定小数点数库导入到您的 Sway 智能合约中,请将以下内容添加到您的 Sway 文件中:
use sway_libs::fixed_point::*;
我们目前支持以下有符号固定小数点数:
IFP64
IFP128
IFP256
要使用IFP64
、IFP128
或IFP256
类型,请像这样将其导入到您的 Sway 项目中:
use sway_libs::fixed_point::{ifp128::IFP128, ifp256::IFP256, ifp64::IFP64,};
我们目前支持以下无符号固定小数点数:
UFP32
UFP64
UFP128
要使用UFP32
、UFP64
或UFP128
类型,请像这样将其导入到您的 Sway 项目中:
use sway_libs::fixed_point::{ufp128::UFP128, ufp32::UFP32, ufp64::UFP64,};
一旦导入,任何有符号或无符号固定小数点数类型都可以通过定义一个新变量并调用from
函数来实例化。
let mut ufp32_value = UFP32::from(0u32);
let mut ufp64_value = UFP64::from(0u64);
let mut ufp128_value = UFP128::from((0u64, 0u64));
基本算术运算像平常一样工作。
fn add_ufp(val1: UFP64, val2: UFP64) {
let result: UFP64 = val1 + val2;
}
fn subtract_ufp(val1: UFP64, val2: UFP64) {
let result: UFP64 = val1 - val2;
}
fn multiply_ufp(val1: UFP64, val2: UFP64) {
let result: UFP64 = val1 * val2;
}
fn divide_ufp(val1: UFP64, val2: UFP64) {
let result: UFP64 = val1 / val2;
}
我们目前支持以下高级数学函数:
let ten = UFP64::from_uint(10);
let res = UFP64::exp(ten);
let ufp64_169 = UFP64::from_uint(169);
let res = UFP64::sqrt(ufp64_169);
let five = UFP64::from_uint(5);
let res = five.pow(3u32);