如何将浮点值转换为字符串?无论出于什么原因,我能找到的留档和所有在线资源都只关心另一种方式。
let value: f32 = 17.65;
let value_as_str: String = .....
有时候,答案很简单:to_string()
。
let pi = 3.1415926;
let s = pi.to_string(); // : String
“创建某事的可读字符串表示”的基础在fmt
模块中。这个模块中最重要的特征可能是Display
。Display
是对类型的抽象,可以格式化为面向用户的字符串(几乎正是你想要的)。通常Display
trait被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”
。