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.