HOWTO · C++

Comment utiliser la setprecision en C++

Cet article présente l'utilisation de la méthode setprecision() en C++

Sur cette page

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