Como imprimir os números com pontos decimais especificados em C++

Jinku Hu 12 outubro 2023
Como imprimir os números com pontos decimais especificados em C++

Este artigo introduzirá como imprimir os números com os pontos decimais especificados em C++.

Utilize std::fixed e std::setprecision Métodos para Especificar a Precisão

Este método utiliza os chamados manipuladores de E/S da biblioteca padrão definida no cabeçalho <iomanip> (ver lista completa). Estas funções podem modificar os dados do fluxo e são utilizadas principalmente para operações de formatação de E/S. No primeiro exemplo, utilizamos apenas o método fixed, que modifica a formatação padrão de forma que os valores de ponto flutuante sejam escritos utilizando notação de ponto fixo. Observe, porém, que o resultado sempre tem uma precisão pré-definida de 6 pontos.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

123.231000
2.234300
0.324000
10.222424
6.349109
110.123294
92.001112
0.000000

Alternativamente, podemos fixar os pontos decimais após a vírgula e especificar o valor de precisão simultaneamente. No próximo exemplo de código, a função fixed é chamada juntamente com setprecision, que por sua vez toma o valor int como parâmetro.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

123.231
2.234
0.324
10.222
6.349
110.123
92.001
0.000

A amostra de código anterior resolve o problema inicial, mas a saída parece bastante mista, e dificilmente está em formatação legível. Podemos utilizar as funções std::setw e std::setfill para exibir valores de flutuação em um determinado vetor alinhado com a mesma posição de vírgula. Para conseguir isso, devemos chamar a função setw para dizer ao cout o comprimento máximo de cada saída (escolhemos 8 neste caso). Em seguida, a função setfill é chamada para especificar um char que preencherá os lugares de preenchimento. Finalmente, adicionamos métodos utilizados anteriormente (fixed e setprecision) e saída para o console.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setfill;
using std::setprecision;
using std::setw;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << setw(8) << setfill(' ') << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

123.231
  2.234
  0.324
 10.222
  6.349
110.123
 92.001
  0.000
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Float