Como usar o setprecision em C++

Jinku Hu 12 outubro 2023
  1. Utilize setprecision() Método para definir precisão personalizada para flutuadores
  2. Utilize setprecision() e std::fixed() para Definir Precisão Personalizada para Flutuadores
  3. Utilize setprecision() e std::fixed() para Alinhar Flutuadores a um Ponto Decimal
Como usar o setprecision em C++

Este artigo demonstrará vários métodos sobre como utilizar o método setprecision em C++.

Utilize setprecision() Método para definir precisão personalizada para flutuadores

A setprecision() faz parte da biblioteca de manipuladores <iomanip> e pode ser utilizada para modificar a precisão padrão dos números de ponto flutuante. A setprecision() é normalmente utilizada em expressões com fluxos de E/S.

O exemplo a seguir mostra como definir a precisão do número de pontos flutuantes para o objeto de fluxo de saída cout. Observe que, setprecision() se aplica ao número inteiro (parte inteira e parte fracionada) e utiliza notação científica quando os números têm uma magnitude maior do que a precisão especificada.

#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,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

123 | 2.23 | 0.324 | 0.012 | 26.9 | 1.1e+04 | 92 | 2.34e-07 |

Utilize setprecision() e std::fixed() para Definir Precisão Personalizada para Flutuadores

Alternativamente, podemos utilizar setprecision() e fixed() manipuladores de fluxo em conjunto para imprimir valores de ponto flutuante com o mesmo número de dígitos após o ponto decimal. O método fixed() define a parte fracional do número para um comprimento fixo, que por padrão é de 6 dígitos. Na amostra de código a seguir, saímos para o fluxo de saída e chamamos ambos os manipuladores antes que o número seja inserido na saída.

#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,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << fixed << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

123.231 | 2.234 | 0.324 | 0.012 | 26.949 | 11013.000 | 92.001 | 0.000 |

Utilize setprecision() e std::fixed() para Alinhar Flutuadores a um Ponto Decimal

Finalmente, podemos combinar os manipuladores setw, right, setfill, fixed e setprecision para emitir números de ponto flutuante alinhados ao ponto decimal. O método setw especifica a largura do fluxo de saída com o número de caracteres passados como argumento. O setfill define um caractere pelo qual o espaço não utilizado será preenchido e o método right diz cout o lado ao qual se aplica a operação de preenchimento.

#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,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << std::setw(10) << std::right << std::setfill(' ') << fixed
         << setprecision(4) << i << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

  123.2310
    2.2343
    0.3240
    0.0120
   26.9491
11013.0000
   92.0011
    0.0000
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