如何在 Rust 中安全且惯用地转换数值类型?
你好!我最近开始学习 Rust,遇到了数字转换的问题。在其他语言(C++、Python)中,我只需写 `(int)float_var` 或 `int(float_var)` 就能工作。但在 Rust 中,编译器总是报错。
以下是我尝试编写的示例代码:
```rust
fn main() {
let a: u8 = 10;
let b: u16 = 20;
let sum = a + b; // 错误:不能将 `u16` 加到 `u8` 上
let pi: f64 = 3.14159;
let int_pi: u32 = pi; // 错误:期望 `u32`,找到 `f64`
let x: i32 = 100;
let y: u32 = x; // 错误:期望 `u32`,找到 `i32`
}
```
我理解 Rust 是强类型语言,但如何正确执行这些转换?我听说过 `as`,但它在溢出时行为不安全。有没有安全且惯用的方式?我需要:
1. 在不同大小的整数之间转换(u8 -> u16, i32 -> u64)
2. 在有符号和无符号类型之间转换
3. 将浮点数转换为整数以及反之