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

3
在我的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

请使用精度格式化语法。 - E net4
我认为这不是重复的,因为我找不到动态精度。我看到了那个答案,但它并没有回答我的问题。 - Selva
@Selva 针对这个问题有两个答案。投票较少的那个是你想要的。 - mcarton
啊...对了,我错过了它。谢谢你指出来。 - Selva
1个回答

7
根据文档,有三种指定所需精度的方法:
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));
}

(游乐场链接)


我查看了文档,但没有找到。也许很难识别。 - Selva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接