格式化打印
约 576 字大约 2 分钟
2026-01-27
format!:将格式化文本写入 String print!:与 format! 类似,但文本会打印到控制台(io::stdout) println!:与 print! 类似,但会在末尾添加换行符 eprint!:与 print! 类似,但文本会打印到标准错误输出(io::stderr) eprintln!:与 eprint! 类似,但会在末尾添加换行符
常规println打印是没问题,例如{}、{number}、{number:>width$}、{number:>5}等常规
fn main(){
println!("Hello, world!");
println!("今天是{0},天气{1},温度{2}度","周二","晴朗","10");
println!("{user} play {game}",user="me" ,game="my game");
println!("十进制 8={}",8);
println!("二进制 8={:b}",8);
println!("八进制 8={:o}",8);
println!("十六进制 8={:x}",8);
println!("空格填充,{number:>5}",number=1);
println!("数字填充,{number:0>5}",number=1);
println!("数字填充,{number:0>with$}",number=1,with=8);
}但是还有一种特使形式是使用format占位,例如format!("{1} {} {0} {}", 1, 2)
隐式占位符 {} 的索引分配与显式索引 {0}/{1} 互不干扰,且隐式占位符按自身出现顺序独立分配索引(从 0 开始连续计数)。
| 占位符位置 | 类型 | 如何确定参数索引 | 实际取值 | 说明 |
|---|---|---|---|---|
{1} | 显式索引 | 直接指定索引 1 | 2 | 取第二个参数 |
{} | 隐式 | 第一个隐式占位符 → 索引 0 | 1 | 隐式序列独立计数,与前面的 {1} 无关 |
{0} | 显式索引 | 直接指定索引 0 | 1 | 取第一个参数 |
{} | 隐式 | 第二个隐式占位符 → 索引 1 | 2 | 隐式序列继续计数 |
显式索引 {n} → 直接取参数列表中索引 n 的值(可重复使用,如 {0} 出现两次)。
隐式占位符 {} → 按自身在格式字符串中出现的顺序,依次分配索引 0, 1, 2... → 分配过程完全独立于显式索引(显式索引用了 {1} 不会影响第一个 {} 取索引 0)。
format!("{1} {}", 10, 20); // "20 10" → {} 是第一个隐式 → 索引0=10
format!("{} {0}", 10, 20); // "10 10" → {} 取索引0, {0} 也取索引0
format!("{0} {1} {} {}", 1,2); // "1 2 1 2" → 两个 {} 分别取索引0和1fmt相关知识 fmt
练习:Pi 约等于 3.142,通过控制显示的小数位数来实现。
let pi = 3.14;
println!("pi={0:.3}",pi);贡献者
flycodeu
版权所有
版权归属:flycodeu
