如何在 Rust 中安全且惯用地转换数值类型?
大家好!我刚从 C++ 和 Python 转到学习 Rust,遇到了一个严重的数字转换问题。在 C++ 中,我习惯直接写 `(int)my_float` 或 `static_cast(value)`,一切正常。但在 Rust 中,编译器总是报错。
具体场景:我正在编写一个计算平均值的程序。我有一个整数向量,需要得到浮点数结果。
```rust
fn average(numbers: &[i32]) -> f64 {
let sum: i32 = numbers.iter().sum();
sum / numbers.len() as f64 // 这能工作,但看起来别扭
}
```
虽然能运行,但我感觉不对。此外,当我尝试反向转换——从 `f64` 到 `i32`——编译器会报错,说不能直接转换。例如:
```rust
let x: f64 = 3.14;
let y: i32 = x as i32; // 这能工作,但会丢失数据
```
我理解 Rust 注重安全性,但如何正确地进行转换呢?