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
的一个子部分,而不是始终处理整个内容。