使用std :: fmt进行格式化时,如何用可变数量填充数字?

时间:2017-01-24 05:44:30

标签: rust

在我向用户展示字符串之前,我希望用0填充字符串,例如

let x = 1234;
println!("{:06}", x); // "001234"

但是,我希望输出字符串的长度是可变的,例如它可以通过用户的命令行参数设置:

let x = 1234;
let width = 6;
println!("{:0*}", width, x); //fails to compile
// error: invalid format string: expected `'}'`, found `'*'`

与精确度不同,0-padding似乎不支持*来指定宽度。

我没有寻找涉及手动填充的解决方案,因为重新实现std::fmt的一部分似乎很尴尬。

1 个答案:

答案 0 :(得分:15)

您可以将:0_格式说明符与变量一起使用:

println!("{:0width$}", x, width = width); // prints 001234

Here it is running in the playground

同样,如果width <= 4,则只打印1234。如果width = 60,则打印:

000000000000000000000000000000000000000000000000000000001234

格式参数也支持序数,因此这也有效:

println!("{:01$}", x, width);

documentation for std::fmt概述了print_!宏支持的各种参数和修饰符。