在我的 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)
根据文档:
有三种可能的方法来指定所需的精度:
一个整数
.N:整数
N本身就是精度。一个整数或名称后跟美元符号
.N$:使用格式参数
N(必须是 ausize)作为精度。星号
.*:
.*意味着这{...}与两个格式输入相关联,而不是一个:第一个输入保存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)
(固定链接到操场)