← Voltar ao blog
· 2 min de leitura

Formatação Decimal em C/C++: De printf a std::format

Minha resposta no SO de 2015 usava printf("%.2f"). C++20 trouxe std::format com sintaxe estilo Python para C++.

cpp formatação stackoverflow funcionalidades

Formatação Decimal em C/C++: De printf a std::format

Em 2015, respondi uma pergunta no Stack Overflow em Português sobre limitar casas decimais em C e C++. Recebeu 5 votos.

A Resposta de 2015: Duas Abordagens

Estilo C com printf:

double valor = 3.14159;
printf("%.2f\n", valor); // Saída: 3.14

C++ com iomanip:

#include <iostream>
#include <iomanip>

double valor = 3.14159;
std::cout << std::fixed << std::setprecision(2) << valor << std::endl; // 3.14

Ambas funcionavam, mas cada uma tinha incômodos. printf exigia memorizar especificadores. iomanip era verboso, e std::fixed + std::setprecision persistiam em saídas subsequentes.

A Abordagem de 2026: std::format

C++20 introduziu std::format, trazendo formatação estilo Python para C++:

#include <format>

double valor = 3.14159;
std::string resultado = std::format("{:.2f}", valor); // "3.14"
std::println("{:.2f}", valor); // C++23: imprime com quebra de linha

Se você conhece f"{valor:.2f}" do Python, já sabe std::format("{:.2f}", valor).

Referência de Especificadores

FormatoResultado para 3.14159Significado
{:.2f}3.14Fixo, 2 decimais
{:.4f}3.1416Fixo, 4 decimais
{:.2e}3.14e+00Notação científica
{:8.2f} 3.14Largura 8, 2 decimais

Conclusão

printf("%.2f") ainda funciona e é a escolha certa em C. Em C++ moderno, std::format oferece sintaxe mais limpa, type safety em tempo de compilação e sem risco de vulnerabilidades de format string.

Posts Relacionados