Arrondir le nombre à virgule flottante à 2 décimales en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les spécificateurs de format de fonction printf pour arrondir le nombre à virgule flottante à 2 décimales en C++
  2. Utilisez les spécificateurs de format de fonction fprintf pour arrondir le nombre à virgule flottante à 2 décimales en C++
  3. Utilisez std::setprecision et std::fixed pour arrondir le nombre à virgule flottante à 2 décimales en C++
Arrondir le nombre à virgule flottante à 2 décimales en C++

Cet article explique plusieurs méthodes pour arrondir les nombres à virgule flottante à 2 décimales en C++.

Utilisez les spécificateurs de format de fonction printf pour arrondir le nombre à virgule flottante à 2 décimales en C++

Les nombres à virgule flottante ont une représentation binaire spéciale, ce qui implique que les nombres réels ne peuvent pas être représentés exactement par les machines. Ainsi, il est courant de recourir à des fonctions d’arrondi lors de l’utilisation des nombres à virgule flottante et des calculs sur ceux-ci. Dans ce cas, cependant, nous n’avons besoin de sortir qu’une certaine partie de la partie fractionnaire des nombres.

La première solution est d’utiliser la fonction printf pour sortir du texte formaté dans le flux stdout. Notez que le spécificateur de format normal pour les nombres float - %f doit être modifié en %.2f. Cette dernière notation garantit que seulement 2 décimales sont imprimées à partir du nombre, et en même temps, elle effectue l’arrondi selon les règles mathématiques courantes. Notez que, une notation similaire peut être utilisée avec les spécificateurs de format d’autres types de données.

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    printf("%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Production:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Utilisez les spécificateurs de format de fonction fprintf pour arrondir le nombre à virgule flottante à 2 décimales en C++

fprintf est une autre fonction qui peut être utilisée pour faire le formatage de sortie comme l’appel printf et en plus, elle peut écrire dans n’importe quel objet de flux FILE* qui peut être passé comme premier argument. Dans l’exemple suivant, nous montrons l’impression dans le flux stderr, une version sans tampon de stdout pour les rapports d’erreurs et la journalisation.

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    fprintf(stderr, "%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Production:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Utilisez std::setprecision et std::fixed pour arrondir le nombre à virgule flottante à 2 décimales en C++

Alternativement, on peut utiliser la fonction std::setprecision de la bibliothèque des manipulateurs d’E/S en conjonction avec std::fixed. Ce dernier est utilisé pour modifier le formatage par défaut des opérations d’entrée/sortie en virgule flottante. Si nous l’utilisons avec std::setprecision, le résultat est une précision fixe des nombres réels, et la précision peut être spécifiée avec l’argument entier passé à std::setprecision lui-même.

#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> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    cout << setprecision(2) << fixed << item << "; ";
  }

  return EXIT_SUCCESS;
}

Production:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
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