HOWTO · C++
Como imprimir os números com pontos decimais especificados em C++
Este artigo introduz como imprimir os números com os pontos decimais especificados em C++
Nesta página
Para exibir um valor de ponto flutuante com uma quantidade específica de dígitos após a vírgula decimal, insira std::fixed seguido de std::setprecision(n) em std::cout. Por exemplo, std::fixed << std::setprecision(2) formata os valores com dois dígitos após a vírgula. Inclua <iostream> para a saída e <iomanip> para os manipuladores.
Usando std::fixed e std::setprecision
std::fixed seleciona a notação de ponto fixo. Com esse formato ativo, std::setprecision(n) define a quantidade de dígitos após a vírgula decimal; assim, os valores são arredondados na exibição e recebem zeros à direita quando necessário. Sem std::fixed, std::setprecision(n) controla a quantidade de algarismos significativos. Consulte o guia de setprecision para mais detalhes.
Compile e execute este programa completo. O código e os rótulos exibidos no exemplo permanecem em inglês, sem tradução, para preservar o bloco original:
#include <iomanip>
#include <iostream>
int main() {
const double values[] = {3.14159, 2.5, 0.004};
std::cout << std::fixed << std::setprecision(2);
for (double value : values) {
std::cout << value << '\n';
}
}
3.14
2.50
0.00
O primeiro valor é arredondado na exibição, o segundo aparece com um dígito fracionário à direita e o terceiro é formatado com a mesma precisão de duas casas. A formatação altera a representação exibida; ela não modifica os valores armazenados nem torna exata a aritmética de ponto flutuante. Para exibir três dígitos após a vírgula decimal, use std::setprecision(3).
O fluxo mantém std::fixed e a precisão selecionada para as próximas inserções de valores de ponto flutuante. Defina outra precisão quando os valores seguintes precisarem de uma exibição diferente. Os manipuladores são declarados em <iomanip>.
Alinhando valores com std::setw e std::setfill
Para organizar valores em colunas, std::setw(width) define uma largura mínima de campo para o próximo valor inserido. Ele não trunca um valor que precise de mais espaço, e a largura volta ao padrão depois dessa inserção. std::setfill(ch) seleciona o caractere de preenchimento e permanece ativo até ser alterado. Por padrão, os números ficam alinhados à direita.
Este exemplo completo usa pontos como preenchimento e mantém cada número formatado em um campo de oito caracteres:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <iomanip>
#include <iostream>
int main() {
std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
<< std::setw(8) << 12.5 << '\n'
<< std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75
Aplique std::setw novamente para cada valor que precise de uma largura de campo; alterar o caractere de preenchimento não define uma largura. Escolha uma largura suficiente para o sinal, os dígitos, a vírgula decimal e as casas decimais esperadas.
Formatando com printf
Programas em C++ também podem usar printf de <cstdio>. Na string de formato, %.2f exibe um valor de ponto flutuante com dois dígitos após a vírgula decimal; altere o 2 para escolher outra quantidade.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
#include <cstdio>
int main() {
const double value = 1.41421;
std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41
Em printf, %f é o especificador de conversão de ponto flutuante para um argumento do tipo double. O especificador de formato e o tipo do argumento precisam corresponder; uma combinação incorreta pode causar comportamento indefinido. Este é um programa C++ completo e não precisa dos cabeçalhos de fluxo.
Escolhendo entre fluxos de C++ e printf
Use std::cout com std::fixed e std::setprecision quando quiser uma formatação por fluxo em C++ que possa ser combinada com outras inserções e preserve o tipo de cada valor. Use printf ao trabalhar com strings de formato no estilo printf já existentes ou quando essa sintaxe for mais conveniente. Ambas as opções são válidas em C++.
Para exibir um número fixo de casas decimais, lembre-se de combinar std::fixed com std::setprecision; no formato padrão do fluxo, o manipulador de precisão tem outro significado. Use std::setw e std::setfill para preencher colunas e reaplique std::setw antes de cada valor, pois a largura se aplica uma única vez.