如何将float转换为字符串?

Phi*_*wig 7 rust

如何将浮点值转换为String?无论出于何种原因,我可以找到的文档和所有在线资源只关注其他方面.

let value: f32 = 17.65;
let value_as_str: String = ..... 
Run Code Online (Sandbox Code Playgroud)

Luk*_*odt 23

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

let pi = 3.1415926;
let s = pi.to_string();  // : String
Run Code Online (Sandbox Code Playgroud)

背景

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

let s = format!("{}", pi);
Run Code Online (Sandbox Code Playgroud)

但还有其他的东西:ToString特质.这个特性谈到了可以转换为a的类型String.现在,有一个神奇的实现:

impl<T> ToString for T 
    where T: Display + ?Sized
Run Code Online (Sandbox Code Playgroud)

这意味着:每个实现的类型Display也会自动实现ToString!所以不要写,format!("{}", your_value)你可以简单地写your_value.to_string()!

虽然这些通配符实现非常有用且功能多样,但它们有一个缺点:查找方法要困难得多.正如你所指出的,文档f32根本没有提及to_string().这不是很好,但这是一个已知的问题.我们正在努力改善这种状况!

高级格式

to_string()方法使用默认格式选项,因此它等效于format!("{}", my_value).但有时,您希望调整值如何转换为字符串.要做到这一点,你必须使用格式说明符format!()的全部功能fmt.你可以阅读有关的那些module documentation.一个例子:

let s = format!("{:.2}", pi);
Run Code Online (Sandbox Code Playgroud)

这将产生一个小数点("3.14")后面正好两位数的字符串.

如果你想你的浮子转换为字符串使用科学记数法,您可以使用{:e}(或{:E}对应于)格式说明LowerExp(或UpperExp)特性.

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

这将导致"3.1415926e6".

  • 谢谢,我会尽快接受您的答复。为什么“f32”的文档中没有这个?https://doc.rust-lang.org/std/primitive.f32.html (2认同)
  • @PhilippLudwig 我添加了一堆解释。我希望这能澄清一些事情:) (2认同)