casting - 无法将字符串从标准输入解析为 float - Rust

标签 casting rust floating-point type-conversion

<分区>

在 Rust 中将字符串类型值解析为浮点类型值时,一切正常
"let pi: f64 = 3.14".parse().unwrap();.

但是,当解析来自标准输入的 String 类型值时,即使它是完全相同的值,程序也会 panic 并抛出:

thread 'main' panicked at 'called Result::unwrap() on an Err value: ParseFloatError { kind: Invalid }', src/libcore/result.rs:999:5 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace.

我检查了值的类型,它一个字符串,所以我不明白错误是关于什么的,而且我一直没能找到任何与标准输入相关的内容(标准输入)和这个问题。还有其他人遇到过这个吗?有什么好的方法可以防止 panic 吗?

这里是一些重现问题的代码:

use std::io::{stdin,stdout,Write};

fn main() {
    let mut s = String::new();

    println!("Give a number ");

    stdin().read_line(&mut s)
        .expect("Did not enter a correct string");

    let user_input: f64 = s.parse().unwrap();

    println!("{:?}", user_input)
}

提前致谢!

最佳答案

根据 SCappella 的建议,需要删除新行。 以下将起作用:

let user_input: f64 = s.trim().parse().unwrap();

关于casting - 无法将字符串从标准输入解析为 float - Rust,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567077/

相关文章:

c - 迭代时 float 不精确

Groovy类型转换

rust - 如何将字符串写入文件?

stream - 延迟 Tokio Stream

inheritance - Rust 继承 : call parent method

matlab - Matlab 中浮点比较的最佳实践是什么?

c# - 为什么我的号码四舍五入不正确?

c++ - 将对象从派生对象转换为基础对象,然后再返回

Java HashMap 盒装键类型自动转换怪异

java - Instanceof 和类型转换技术