将 usize 转换为 f32

Mat*_*ero 5 rust

我已经实现了以下计算序列平均值的函数:

fn mean<T, R>(seq: &[T]) -> R
    where R: Div<R, Output=R> + From<T> + From<usize> + Sum<R>
{
    let total: R = seq.iter().map(|&x| R::from(x)).sum()
    let size = R::from(seq.len())
    total / size
}
Run Code Online (Sandbox Code Playgroud)

usize但是,我在转换从返回的值时遇到了麻烦seq.len()

let numbers = vec![10, 20, 30, 40, 50, 60];
let result: f32 = mean(&numbers);
println!("{:?}", result);
Run Code Online (Sandbox Code Playgroud)
5  | fn mean<T, R>(seq: &[T]) -> R
   |    ----
6  |     where R: Div<R, Output=R> + From<T> + From<usize> + Sum<R>
   |                                           ----------- required by this bound in `mean`
...
15 |     let result: f32 = mean(&numbers);
   |                       ^^^^ the trait `std::convert::From<usize>` is not implemented for `f32`
Run Code Online (Sandbox Code Playgroud)

我对此感到非常困惑,因为我还是一个有特质的初学者。我该如何解决这个具体问题?(如果可以的话)

Max*_*axV 1

不可能以格式表示每个可能的i32f32From这就是为什么提供的特征实现f32仅支持i16// u16/i8的原因u8

i32f32具有相同数量的字节,但通常 f32 花费几个字节来表示指数,因此它不能代表 中的所有数字i32单精度浮点格式