Formatação
Use format!, write! e traits std::fmt com precisão, largura, alinhamento e Display/Debug customizados.
Receita
fn main() {
let pi = 3.14159;
println!("{pi:.2}");
let s = format!("{:>8}", "right");
println!("{s}");
}Quando usar: Strings para o usuário, logs, tabelas, saída com preenchimento.
Exemplo Funcional
use std::fmt;
struct Percent(f64);
impl fmt::Display for Percent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:.1}%", self.0 * 100.0)
}
}
fn main() {
println!("{}", Percent(0.856));
}O que isto demonstra:
Displaycustomizado para formatação de domínio- Controle de precisão do formatador
- Macro
write!dentro deimpl
Mergulho Profundo
Especificadores: hexadecimal, binário, {:?} Debug, {:#?} Debug detalhado, {name} argumentos nomeados, {:08} preenchimento com zeros.
Armadilhas
- Debug para usuários - Escapes feios. Correção:
Display. format!em loop crítico - Aloca a cada vez. Correção: reutilizar buffer comwrite!.- Precisão incorreta em inteiros - Ainda funciona - largura vs. precisão são diferentes.
Displaynão derivável - Implementação manual necessária.- Largura Unicode vs. caracteres - O preenchimento usa principalmente a largura do caractere - nuances do terminal.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
itertools::format | Juntar iteradores | format! simples |
| Crates de template | HTML/email | Pequena mensagem de CLI |
serde_json::to_string | JSON não legível por humanos | Texto para o usuário |
FAQs
Sintaxe de alinhamento?
<, >, ^ para esquerda, direita, centro.Caractere de preenchimento?
{:*>10} preenche com asteriscos.debug_struct?
Construtor `fmt::DebugStruct`.Formato de ponteiro?
{:p} endereço.Binário/octal?
{:b} {:o}.Científico?
{:e} para floats.Localização?
Não está no std.writeln?
Adiciona nova linha.to_string com Display?
format!("{v}") se tiver Display.Campos de tracing?
% para Display, ? para Debug.Relacionados
Versões do Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.