如何将float转换为字符串?

时间:2017-09-06 22:02:35

标签: rust

如何将浮点值转换为字符串?无论出于何种原因,我可以找到的文档和所有在线资源只关注相反的方式。

let value: f32 = 17.65;
let value_as_str: String = ..... 

1 个答案:

答案 0 :(得分:19)

有时,答案很简单:to_string()

let pi = 3.1415926;
let s = pi.to_string();  // : String

背景

创建可读字符串表示的基础""在fmt module。可能这个模块中最重要的特征是DisplayDisplay是对类型的抽象,可以将其格式化为面向用户的字符串(几乎完全符合您的要求)。通常Display特征由println!()和朋友使用。因此,您已经可以使用format!()宏将float转换为字符串:

let s = format!("{}", pi);

但还有别的东西:ToString trait。此特征讨论了可以转换为String的类型。现在,有一个神奇的实现:

impl<T> ToString for T 
    where T: Display + ?Sized

这意味着:实现Display的每个类型也会自动实现ToString!因此,您只需撰写format!("{}", your_value)

,而不是撰写your_value.to_string()

虽然这些通配符实现非常有用且功能多样,但它们有一个缺点:查找方法要困难得多。正如您所指出的那样,the documentation of f32根本没有提到to_string()。这不是很好,但这是一个已知的问题。我们正试图改善这种情况!

高级格式化

to_string()方法使用默认格式选项,因此它等同于format!("{}", my_value)。但有时,您希望调整值如何转换为字符串。为此,您必须使用format!()fmt格式说明符的全部功能。您可以阅读module documentation中的内容。一个例子:

let s = format!("{:.2}", pi);

这将产生一个字符串,在小数点后面两位数"3.14")。

如果要使用科学记数法将浮点数转换为字符串,可以使用{:e}(或{:E})格式说明符,该格式说明符对应{{3 (或LowerExp)特质。

let s = format!("{:e}", pi * 1_000_000.0);

这将导致"3.1415926e6"