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

标签 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 的一部分似乎很尴尬。

最佳答案

您可以使用 :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/

相关文章:

rust - 如何解构/移出 Drop 实现类型?

arrays - 如何在 Rust 0.8 中将 Zip 转换为数组?

实现迭代器时出现 Rust 类型错误

rust - 我为什么要使用不同的功能?

reactjs - 我正在尝试使用 Tauri 1.2、Rust、React 和 Typescript 创建一个新窗口。我面临一些问题

winapi - 调用 GetBinaryTypeA 时出现段错误

rust - 借用内容的作业

windows - 无法在 Windows 上构建 RuSTLess

rust - 如何指向crates.io中的crate的.crate文件的本地副本?

rust-buildgen requestAnimationFrameLoop 无法在闭包内使用结构方法