Floating point 将浮点转换为包含所有数字的字符串

Floating point 将浮点转换为包含所有数字的字符串,floating-point,rust,Floating Point,Rust,在Rust中,我可以使用println或.to_string(),但它将只打印必要的无损数字。如何获取浮点的所有数字?例如,应将0.1f32转换为“0.10000001490119384765625”这似乎可以实现以下功能: format!("{:.51}", i).trim_right_matches(|c| c == '0' || c == '.').to_string(); 这有点垃圾,因为你需要预先指定所需的最大位数,而我不是100%确定51位(对于f32-对于f64,它会更多) 另外

在Rust中,我可以使用
println
.to_string()
,但它将只打印必要的无损数字。如何获取浮点的所有数字?例如,应将
0.1f32
转换为
“0.10000001490119384765625”

这似乎可以实现以下功能:

format!("{:.51}", i).trim_right_matches(|c| c == '0' || c == '.').to_string();
这有点垃圾,因为你需要预先指定所需的最大位数,而我不是100%确定51位(对于
f32
-对于
f64
,它会更多)


另外,
trim\u right\u matches()
返回一个
&str
,然后
到字符串()
生成一个新的
字符串,这是次优的。只需对
格式返回的
字符串
进行
truncate()
处理,就可以做得更好!()

它将只打印需要的无损数字-那不是“所有数字”吗?@Shepmaster-否-我假设OP的意思是无损的,可以唯一映射回原始浮点。@OliverCharlesworth:由于英语的歧义,我不知道谢普马斯特的意思是你所建议的还是相反的。他们评论中的文字可能意味着所有必要的无损数字都满足OP对所有数字的要求(如果有人认为浮点数是近似值,因此产生所有无损数字实际上就是产生数字)或者,这可能意味着产生所有数字是产生必要的无损数字的必要条件(因为如果不产生所有数字,则会有一些损失……从某种意义上说,打印的值不等于表示的值,因此会损失一些值)。@Shepmaster:根据IEEE-754,每个浮点数正好代表一个数字。例如,在IEEE-754基本32位二进制浮点中,表示的最小非零数为2^-149,当以十进制表示时,小数点后有149位。因为它有44个前导零,所以它有105个有效数字。生成所有需要无损的数字只是(通常)四舍五入到一个十进制数字,而不是生成所表示数字的实际数字。由于此答案不正确,您应该在向下投票开始之前删除它。保留它是因为我要修复它。为了将来的参考,您可以删除、编辑和取消删除。