我希望在将字符串显示给用户之前对其进行 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
的一部分似乎很尴尬。
最佳答案
您可以使用 :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_!
宏支持。
关于rust - 在使用 std::fmt 格式化时,如何用可变数量对数字进行 0 填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820818/