Avatar ·

如何在 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 注重安全性,但如何正确地进行转换呢?