#cast #integer #checked #float

无 std az

类型转换和已检查的类型转换

11 个版本 (6 个稳定)

1.2.1 2022年7月25日
1.2.0 2021年11月24日
1.1.2 2021年8月23日
1.1.1 2021年3月25日
0.3.0 2019年10月1日

#48Rust 模式

Download history 31481/week @ 2024-03-14 29091/week @ 2024-03-21 28250/week @ 2024-03-28 30157/week @ 2024-04-04 30688/week @ 2024-04-11 29417/week @ 2024-04-18 28259/week @ 2024-04-25 32419/week @ 2024-05-02 29669/week @ 2024-05-09 29610/week @ 2024-05-16 29495/week @ 2024-05-23 26809/week @ 2024-05-30 31544/week @ 2024-06-06 33385/week @ 2024-06-13 33647/week @ 2024-06-20 28476/week @ 2024-06-27

131,959 每月下载量
用于 611 个 crate (20 直接)

MIT/Apache

190KB
4K SLoC

数值类型转换

这个crate提供了类型转换和已检查的类型转换。

更新内容

版本 1.2.1 更新内容(2022-07-25)

  • 修复了在 Windows 下使用 rustc 1.64.0-nightly 构建的问题。

版本 1.2.0 更新内容(2021-11-24)

其他版本

其他版本详细信息请见 RELEASES.md

快速示例

use az::{Az, OverflowingAs, WrappingAs};
use core::num::Wrapping;

// Panics on overflow with `debug_assertions`, otherwise wraps
assert_eq!(12i32.az::<u32>(), 12u32);

// Always wraps
let wrapped = 1u32.wrapping_neg();
assert_eq!((-1).wrapping_as::<u32>(), wrapped);
assert_eq!((-1).overflowing_as::<u32>(), (wrapped, true));

// Wrapping can also be obtained using `Wrapping`
assert_eq!((-1).az::<Wrapping<u32>>().0, wrapped);

支持从浮点数到整数的转换。数字四舍五入到零,但可以使用 Round 包装器将浮点数转换为整数,并以最接近的数进行四舍五入,奇偶数情况四舍六入五成双。

use az::{Az, CheckedAs, Round, SaturatingAs};
use core::f32;

assert_eq!(15.7.az::<i32>(), 15);
assert_eq!(Round(15.5).az::<i32>(), 16);
assert_eq!(1.5e20.saturating_as::<i32>(), i32::max_value());
assert_eq!(f32::NAN.checked_as::<i32>(), None);

实现其他类型的类型转换

要提供其他类型的类型转换,你应该实现 Cast 特质,如果需要,还应实现 CheckedCastSaturatingCastWrappingCastOverflowingCastUnwrappedCast 特质。对于所有使用泛型实现和前述特质利用的类型的 AzCheckedAsSaturatingAsWrappingAsOverflowingAsUnwrappedAs 特质已经实现。

类型转换特性也可以应用于引用。这对于不实现 Copy 的昂贵类型非常有用。例如,如果你有一个不实现 Copy 的自定义整数类型,你可以实现如下示例中的类型转换。(I 可以是一个昂贵的类型,例如大整数,但在示例中它只是一个包装的 i32。)

use az::{Az, Cast};
use core::borrow::Borrow;

struct I(i32);
impl Cast<i64> for &'_ I {
    fn cast(self) -> i64 { self.0.cast() }
}

let owned = I(12);
assert_eq!(owned.borrow().az::<i64>(), 12);

使用 az

az 包可在 crates.io 获取。要在你的包中使用它,请在 Cargo.toml 中将其添加为依赖项

[dependencies]
az = "1.2"

该包需要 rustc 版本 1.31.0 或更高版本。

许可证

本包是自由软件:你可以根据以下任一许可证的条款重新分发和/或修改它

自行选择。

贡献

除非你明确声明,否则任何有意提交给作品并包含在你中的贡献,根据 Apache License, Version 2.0 定义,应按上述方式双许可,不附加任何额外条款或条件。

无运行时依赖