Rust中不同整数类型的函数参数

Function parameter of different integer types in Rust

如果 Rust 支持两个 percent 函数,我将如何执行以下操作?

fn percent(x: u8) -> f32 {
    x as f32 / 100.0
}
fn percent(x: u16) -> f32 {
    x as f32 / 100.0
}

如果我尝试像下面这样的通用数据类型:

fn percent<T>(x: T) -> f32 {
    x as f32 / 100.0
}

我收到错误

non-primitive cast: T as f32

我可以用某种整数特征来约束 T 吗?

如果只想支持u8u16类型,那么:

fn percent<T: Into<f32>>(x: T) -> f32 {
    x.into() / 100.0
}

就足够了,因为 u8u16 都可以无损地转换为 f32。如果你想一般地转换,比如说 u64f64,在这种情况下可能会发生精度损失,你可以使用 convApproxInto 特征。

fn percent<T: ApproxInto<f64>>(x: T) -> Result<f64, T::Err> {
    x.approx_into().map(|v| v / 100.0)
}