【问题标题】:How can I 0-pad a number by a variable amount when formatting with std::fmt?使用 std::fmt 格式化时,如何按可变数量填充数字?
【发布时间】:2017-01-24 05:44:30
【问题描述】:

我希望在将字符串显示给用户之前对其进行 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 的一部分似乎很尴尬。

【问题讨论】:

    标签: rust


    【解决方案1】:

    您可以将: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_! 宏支持的各种参数和修饰符。

    【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多