有没有办法在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);
}
在 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);
}