如何将 f32 转换为具有动态精度的字符串?



在我的 rust 代码中,我有一个函数,它将浮点数和精度作为参数。该函数应返回格式化字符串。但是,我不确定如何以动态精度进行格式化,

fn convert(val: f32, precision: i16) -> String {
format!("{:.2}", val) // The 2 should be replaced with precision
}
// convert(1.2345, 1) -> 1.2
// convert(1.2345, 2) -> 1.23

根据文档:

有三种可能的方法可以指定所需的精度:

  1. 整数.N

    整数本身就是精度N

  2. 整数或名称后跟美元符号.N$

    使用格式参数N(必须是usize(作为精度。

  3. 星号.*

    .*意味着此{...}与两个格式输入相关联,而不是一个:第一个输入保存usize精度,第二个输入保存要打印的值。请注意,在这种情况下,如果使用格式字符串{<arg>:<spec>.*},则<arg>部分是指要打印的值,并且精度必须在前面的输入中<arg>

也就是说,您可以使用:

fn convert(val: f32, precision: usize) -> String {
format!("{:.prec$}", val, prec = precision)
}
fn main() {
println!("{}", convert(3.14, 0));
println!("{}", convert(3.14, 1));
println!("{}", convert(3.14, 2));
println!("{}", convert(3.14, 3));
}

(永久链接到操场(

最新更新