文章目录
Rust 的格式化输出由 std::fmt 模块提供,核心是 format!、 println!、 print!、 eprintln! 等宏。它们的占位符是 {},通过 格式说明符 控制输出样式。
1.基本占位符
| 占位符 | 说明 | 示例 |
|---|---|---|
{} |
默认格式,按类型的 Display trait 输出 |
println!("{}", 42) → 42 |
{:?} |
Debug 格式,按 Debug trait 输出 |
println!("{:?}", vec![1,2]) → [1, 2] |
{:#?} |
美化 Debug 格式,多行缩进 | 常用于结构体调试 |
{:#x} |
带前缀的十六进制 | println!("{:#x}", 255) → 0xff |
{:#b} |
带前缀的二进制 | println!("{:#b}", 5) → 0b101 |
2.格式说明符完整语法
{:[[填充]对齐][符号][#][0][宽度][.精度][类型]}
| 部分 | 说明 | 示例 |
|---|---|---|
| 填充 | 填充字符,默认空格 | {:->10} → --------42 |
| 对齐 | < 左对齐,^ 居中,> 右对齐 |
{:<10}、{:^10}、{:>10} |
| 符号 | + 强制显示正号,- 默认 |
{:+} → +42 |
# |
显示前缀(0x、0b) |
{:#x} → 0xff |
0 |
用 0 填充 | {:05} → 00042 |
| 宽度 | 最小宽度 | {:8} → 42 |
| 精度 | 浮点小数位数,或字符串最大长度 | {:.2} → 3.14 |
| 类型 | 输出进制或格式 | x、X、b、o、e、? |
3.常用示例
1. 整数进制
rust
println!("{}", 255); // 255(十进制)
println!("{:x}", 255); // ff(小写十六进制)
println!("{:X}", 255); // FF(大写十六进制)
println!("{:b}", 5); // 101(二进制)
println!("{:o}", 8); // 10(八进制)
println!("{:#x}", 255); // 0xff(带前缀)
2. 浮点数
rust
println!("{}", 3.14159); // 3.14159
println!("{:.2}", 3.14159); // 3.14(保留 2 位小数)
println!("{:e}", 31415.9); // 3.14159e4(科学计数法)
3. 宽度与对齐
rust
println!("{:>10}", 42); // " 42"(右对齐)
println!("{:<10}", 42); // "42 "(左对齐)
println!("{:^10}", 42); // " 42 "(居中)
println!("{:05}", 42); // "00042"(零填充)
println!("{:->10}", 42); // "--------42"(自定义填充)
4. 位置参数与命名参数
rust
// 位置参数:按顺序引用
println!("{0} {1} {0}", "a", "b"); // a b a
// 命名参数:按名称引用
println!("{name} 今年 {age} 岁", name = "Alice", age = 30);
// 捕获外部变量(Rust 2021+)
let x = 42;
println!("{x}"); // 直接使用变量名
5. Debug 格式
rust
#[derive(Debug)]
struct Point { x: i32, y: i32 }
let p = Point { x: 1, y: 2 };
println!("{:?}", p); // Point { x: 1, y: 2 }
println!("{:#?}", p); // 多行美化格式
4.注意事项
| 注意点 | 说明 |
|---|---|
{} 需要 Display trait |
自定义类型默认没有 Display,需手动实现或用 {:?} |
{:?} 需要 Debug trait |
用 #[derive(Debug)] 自动派生 |
| 精度对字符串的影响 | {:.3} 对字符串表示截取前 3 个字符 |
| 宽度是最小值 | 实际内容超过宽度时不会被截断 |
5.一句话总结
Rust 格式化占位符 {} 通过 {:[[填充]对齐][符号][#][0][宽度][.精度][类型]} 控制输出,支持 Display、Debug、进制转换、对齐、填充、精度等,是 Rust 中最常用的输出工具。