Rust 如何转换&;i32到f64?

Rust 如何转换&;i32到f64?,rust,Rust,我正在努力解决这个问题 下面是一个代码示例: fn mean(v: &Vec<i32>) -> f64 { let mut sum = 0.0; let mut count = 0.0; for val in v { sum += &f64::from(val); count += 1.0; } sum / count } fn main() { let v = vec![1,

我正在努力解决这个问题

下面是一个代码示例:

fn mean(v: &Vec<i32>) -> f64 {
    let mut sum = 0.0;
    let mut count = 0.0;

    for val in v {
        sum += &f64::from(val);
        count += 1.0;
    }

    sum / count
}

fn main() {
    let v = vec![1, 2, 3, 4];

    println!("The mean is {}", mean(&v));
}
fn平均值(v:&Vec)->f64{
设mut和=0.0;
让mut count=0.0;
v中的val{
sum+=&f64::from(val);
计数+=1.0;
}
总数
}
fn main(){
设v=vec![1,2,3,4];
println!(“平均值为{}”,平均值(&v));
}
错误是:

error[E0277]:未满足特性绑定'f64:std::convert::From'
-->src/main.rs:6:17
|
6 | sum+=&f64::from(val);
|^^^^^^^`f64未实现特性`std::convert::From``
|
=帮助:找到了以下实现:
和其他3人
=注意:`std::convert::From::From'需要`
我还尝试将
用作
关键字,但没有效果。

f64
,而不是
&i32
(这是对
i32
的引用)。要使其工作,您需要取消对
val
的引用

fn平均值(v:&Vec)->f64{
设mut和=0.0;
让mut count=0.0;
v中的val{
sum+=f64::from(*val);
计数+=1.0;
}
总数
}
如果您尝试将
val作为f64
执行,则同样适用,事实上,在这种情况下,您会收到一条更有用的错误消息:

错误[E0606]:将`&i32`转换为`f64`无效
-->src/main.rs:6:16
|
6 | sum+=val为f64;
|                ---^^^^^^^
|                |
|无法将“%i32”强制转换为“f64”`
|帮助:取消引用表达式:`*val`

您可以将
*val作为f64来取消对变量的引用

fn mean(v: &Vec<i32>) -> f64 {
    let mut sum = 0.0;
    let mut count = 0.0;

    for val in v {
        sum += *val as f64;
        count += 1.0;
    }

    sum / count
}

fn main() {
    let v = vec![1, 2, 3, 4];

    println!("The mean is {}", mean(&v));
}
fn平均值(v:&Vec)->f64{
设mut和=0.0;
让mut count=0.0;
v中的val{
总和+=*val为f64;
计数+=1.0;
}
总数
}
fn main(){
设v=vec![1,2,3,4];
println!(“平均值为{}”,平均值(&v));
}
另一种方法

fn main() {
    let v = vec![1, 2, 3, 4];
    let mean: f64 = v.iter().map(|&val| val as f64).sum::<f64>() / v.len() as f64;

    println!("The mean is {}", mean);
}
fn main(){
设v=vec![1,2,3,4];
意思是:f64=v.iter().map(|&val | val为f64)。求和:()/v.len()为f64;
println!(“平均值为{}”,平均值);
}

这太棒了,我完全忘记了这一点。非常感谢您请将答案标记为正确,这对双方都是有益的!(和谷歌搜索):)还请注意,您可以将
v
的类型更改为
&[i32]
(i32
s的一种)-这比引用
Vec
更习惯于生锈,因为它使功能更灵活。例如,它允许您传入
Vec
的一个子部分,而不是始终处理整个内容。