Rust 如何将浮点转换为字符串?
如何将浮点值转换为字符串?无论出于什么原因,我能找到的文档和所有在线资源都只涉及到另一方面Rust 如何将浮点转换为字符串?,rust,Rust,如何将浮点值转换为字符串?无论出于什么原因,我能找到的文档和所有在线资源都只涉及到另一方面 let value: f32 = 17.65; let value_as_str: String = ..... 有时候,答案很简单: 背景 “创建某物可读字符串表示”的基础是本模块中最重要的特点可能是显示是对类型的抽象,可以将其格式化为面向用户的字符串(几乎完全符合您的需要)。通常,Displaytrait被println!()和朋友们。所以,您已经可以使用格式将浮点值转换为字符串了!()宏: l
let value: f32 = 17.65;
let value_as_str: String = .....
有时候,答案很简单:
背景
“创建某物可读字符串表示”的基础是本模块中最重要的特点可能是<代码>显示是对类型的抽象,可以将其格式化为面向用户的字符串(几乎完全符合您的需要)。通常,
Display
trait被println!()
和朋友们。所以,您已经可以使用格式将浮点值转换为字符串了!()
宏:
let s = format!("{}", pi);
但还有另外一件事:那就是。此特性涉及可以转换为字符串的类型。现在,有一个神奇的实现:
impl<T> ToString for T
where T: Display + ?Sized
这将产生一个在小数点后正好有两位的字符串(“3.14”
)
如果要使用科学记数法将浮点转换为字符串,可以使用与(或)特征对应的{:e}
(或{:e}
)格式说明符
这将导致“3.1415926e6”
,,我打赌这是一个重复,但我找不到类似的问题。旁白:在C语言中,用sprintf(buf,sizeof buf,“%.*e”,FLT_DECIMAL_DIG-1,some_float)将一个浮点
打印成一个足够但位数不太多的字符串代码>。我可以为你提供一些想法。实际上我不知道C的FLT\u DECIMAL
,所以谢谢你。C++与<>代码STD::tox字符串相比更为出色;我在rust中寻找类似的东西。请注意,std::to_string
使用固定的(非指数表示法),它倾向于将小的float
转换为“0.000000”和带有过多数字的非常大的值。我想知道.to_string()
是否也这样做?我在我的答案中添加了一些示例,说明如何使用小数点后的固定数字进行格式化,以及如何使用指数表示法进行格式化。谢谢,我会尽快接受你的答案。为什么这不在f32的文档中@菲利普路德维希一世补充了一大堆解释。我希望这澄清了事实:)这确实澄清了情况。非常感谢你的努力!有时候,答案很简单。但是,例如(1e-300).to_string()
的输出是非常意外的,并且与许多其他语言中字符串化浮动的工作方式不同。实际上,获得了一条人性化的字符串。
impl<T> ToString for T
where T: Display + ?Sized
let s = format!("{:.2}", pi);
let s = format!("{:e}", pi * 1_000_000.0);