为什么.parse()转换" 42"到f64但转换失败" 42.0"到i32?

时间:2017-11-08 11:02:23

标签: rust

这条线为何以及如何运作:

let guess: f64 = "42".parse().expect("Not a number!");

但这不是吗?

let guess: i32 = "42.0".parse().expect("Not a number!");

导致:

thread 'main' panicked at 'Not a number!: ParseIntError { kind: InvalidDigit }'

解析" float"的正确方法是什么? & str to integer?

更新

我发现这个有用:

let guess: i32 = "42.0".parse::<f64>().expect("Not a number!") as i32;

但是,我不了解它的工作原理以及它是否是正确的方法?

1 个答案:

答案 0 :(得分:6)

您正在呼叫的内容实际上是let guess: i32 = "42.0".parse::<i32>();

但是,"42.0"不是i32的正确表示。

根据documentation

  

由于parse如此通用,因此可能会导致类型问题   推理。因此,parse是您可以看到的少数几次之一   语法被亲切地称为&#39; turbofish&#39;:::<>。这有助于   推理算法明确了解您尝试的类型   解析成。

您已经找到的正确解决方案确实提示解析器该字符串是浮点数的表示形式:

"42.0".parse::<f64>()