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);
我是 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);