如何以动态精度将 f32 转换为 String?

Sel*_*lva 2 rust

在我的 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
Run Code Online (Sandbox Code Playgroud)

mca*_*ton 5

根据文档

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

  1. 一个整数.N

    整数N本身就是精度。

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

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

  3. 星号.*

    .*意味着这{...}与两个格式输入相关联,而不是一个:第一个输入保存usize精度,第二个保存要打印的值。请注意,在这种情况下,如果使用格式 string {<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));
}
Run Code Online (Sandbox Code Playgroud)

固定链接到操场