Comment utiliser la setprecision en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la méthode setprecision() pour définir une précision personnalisée pour les flotteur
  2. Utilisez setprecision() et std::fixed() pour définir une précision personnalisée pour les float
  3. Utilisez setprecision() et std::fixed() pour aligner les nombres float sur une virgule décimale
Comment utiliser la setprecision en C++

Cet article présentera plusieurs méthodes sur la façon d’utiliser la méthode de setprecision en C++.

Utiliser la méthode setprecision() pour définir une précision personnalisée pour les flotteur

setprecision() fait partie de la bibliothèque de manipulateurs d’entrées/sorties <iomanip> et peut être utilisée pour modifier la précision par défaut des nombres à virgule float. setprecision() est généralement utilisé dans les expressions avec des flux d’entrées/sorties.

L’exemple suivant montre comment définir la précision des nombres float pour l’objet flux de sortie cout. Notez que, setprecision() s’applique au nombre entier (partie entière et partie fractionnaire) et utilise la notation scientifique lorsque les nombres ont une magnitude supérieure à la précision spécifiée.

#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;
}

Production:

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

Utilisez setprecision() et std::fixed() pour définir une précision personnalisée pour les float

On peut aussi utiliser les manipulateurs de flux setprecision() et fixed() en conjonction pour imprimer des valeurs en virgule float avec le même nombre de chiffres après la virgule. La méthode fixed() fixe la partie fractionnaire du nombre à une longueur fixe, qui par défaut est de 6 chiffres. Dans l’exemple de code suivant, nous sortons vers le flux cout et appelons les deux manipulateurs avant que le nombre ne soit inséré dans la sortie.

#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;
}

Production:

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

Utilisez setprecision() et std::fixed() pour aligner les nombres float sur une virgule décimale

Enfin, nous pouvons combiner les manipulateurs setw, right, setfill, fixed et setprecision pour produire des nombres à virgule float alignés à la virgule. La méthode setw spécifie la largeur du flux de sortie avec le nombre de caractères passés en argument. La méthode setfill définit un caractère par lequel l’espace non utilisé sera rempli et la méthode right indique cout le côté auquel l’opération de remplissage s’applique.

#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;
}

Production:

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

Article connexe - C++ Float