println 中只能使用 0 来填充数字

Can't use anything but 0 to pad a number in println

我是 Rust 的新手,因此在传递给 println! 宏时我正在尝试各种参数。 当我尝试以下代码时,我可以成功编译它。

println! (" let the world be in peace {number:0width$} ",number = 1.1414, width = 9);

输出如下:

let the world be in peace 0001.1414

因此我的理解是基于width的值,0的值作为填充添加到输出中。但是当我尝试使用以下代码将 1 添加为填充时,它会导致编译错误:

println! ("let me know {number:1width$}",number = 1.1414, width = 9); 

编译错误堆栈如下:

    error: invalid format string: expected `'}'`, found `'$'`
  --> print_statements.rs:25:42
   |
25 |     println! ("let me know {number:1width$}",number = 1.1414, width = 9);
   |                            -             ^ expected `}` in format string
   |                            |
   |                            because of this opening brace
   |
   = note: if you intended to print `{`, you can escape it using `{{`

error: aborting due to previous error

我错过了什么吗? 感谢您的帮助!

虽然命名约定可能令人遗憾地使 1width(或 width 前面的任何数字)看起来有效,但事实并非如此。 0 是一个 specific number formatting flag 用于用 0 填充数字而不是像正常情况下的 spaces。

考虑宽度的用途可能有助于了解为什么会出现这种情况。宽度通过用填充字符 填充 remaining space 确保值至少占用特定数量的字符(用于对齐多行)不会改变打印内容的值。 0 与 spaces 相比是一个额外的选择,因为将 0s 添加到数字的 beginning/end 不会改变值,但是添加 1s 会以不可预测的方式完全改变打印值(基于号码长度)。

就是说,rust 提供 fill/alignment 作为指定用作宽度填充的字符的方法。使用它,您的 println! 变为以下内容:

println!("let me know {number:1>width$}", number = 1.1414, width = 9);