如何将浮点值转换为字符串?无论出于何种原因,我可以找到的文档和所有在线资源只关注相反的方式。
let value: f32 = 17.65;
let value_as_str: String = .....
答案 0 :(得分:19)
有时,答案很简单:to_string()
。
let pi = 3.1415926;
let s = pi.to_string(); // : String
创建可读字符串表示的基础""在fmt
module。可能这个模块中最重要的特征是Display
。 Display
是对类型的抽象,可以将其格式化为面向用户的字符串(几乎完全符合您的要求)。通常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"
。