有没有办法在println中设置宽度参数!有一个变量?

Is there a way to set the width parameter in println! with a variable?

在 C 中,您可以像这样动态地使用设置 printf 的宽度参数:

printf("%*.*f", width, precision, value);

这就是我希望它的工作方式:

let width = 8;
let precision = 2;
let value = 1234.56789;
println!("{:*.*}", width, precision, value);

但是使用该语法会抛出 expected '}' in format string

此类作品:

let width = 8;
let precision = 2;
let value = 1234.56789;
println!("{:8.*}", precision, value);

但是如您所见,宽度不是动态设置的。我认为由于某些充分的理由它不起作用。是否有可能使其以类似的方式工作或是否有任何解决方法?

你可以这样写:

fn main() {
    let width = 8;
    let precision = 2;
    let value = 1234.56789;
    println!("{:width$.precision$}", value);
}

这避免了将要格式化的实际值与格式化参数混合在一起,我认为这很好。

你也可以这样写:

fn main() {
    let width = 8;
    let precision = 2;
    let value = 1234.56789;
    println!("{:1$.2$}", value, width, precision);
}

或者:

fn main() {
    let width = 8;
    let precision = 2;
    let value = 1234.56789;
    println!("{:foo$.bar$}", value, foo = width, bar = precision);
}