提问者:小点点

如何将浮点数转换为字符串?


如何将浮点值转换为字符串?无论出于什么原因,我能找到的留档和所有在线资源都只关心另一种方式。

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

共1个答案

匿名用户

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

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

“创建某事的可读字符串表示”的基础在fmt模块中。这个模块中最重要的特征可能是DisplayDisplay是对类型的抽象,可以格式化为面向用户的字符串(几乎正是你想要的)。通常Displaytrait被println!()和朋友使用。所以你已经可以用格式将浮点数转换为字符串了!()宏:

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

但是还有别的东西:ToString特征。这个特征谈到了可以转换为String的类型。现在,有一个神奇的实现:

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

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

虽然这些通配符实现非常有用和通用,但它们有一个缺点:查找方法要困难得多。正如您指出的,f32的留档根本没有提到to_string()。这不是很好,但这是一个已知的问题。我们正在努力改善这种情况!

to_string()方法使用默认的格式选项,所以它相当于格式!("{}", my_value)。但是有时,你想调整值如何转换为字符串。为此,你必须使用format!()fmt格式说明符的全部功能。你可以在模块留档中阅读这些内容。一个例子:

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

这将导致小数点后恰好有两位数的字符串("3.14")。

如果您想使用科学符号将浮点数转换为字符串,您可以使用{: e}(或{:E})格式说明符,它对应于LowerExp(或UpperExp)特征。

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

这将导致“3.1415926e6”