HOWTO · C++

Comment imprimer des nombres avec des décimales spécifiées en C++

Cet article présente comment imprimer les nombres avec des points décimaux spécifiés en C++

Sur cette page

Pour afficher une valeur à virgule flottante avec un nombre choisi de chiffres après la virgule, écrivez std::fixed, puis std::setprecision(n), dans std::cout. Par exemple, std::fixed << std::setprecision(2) affiche deux chiffres après la virgule. Incluez <iostream> pour la sortie et <iomanip> pour les manipulateurs.

Utiliser std::fixed et std::setprecision

std::fixed sélectionne la notation à virgule fixe. Lorsque ce format est actif, std::setprecision(n) définit le nombre de chiffres après la virgule ; les valeurs sont donc arrondies à l’affichage et complétées par des zéros à droite si nécessaire. Sans std::fixed, std::setprecision(n) définit plutôt le nombre de chiffres significatifs. Consultez le guide sur setprecision pour en savoir plus.

Compilez et exécutez ce programme complet :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <iomanip>
#include <iostream>

int main() {
    const double values[] = {3.14159, 2.5, 0.004};
    std::cout << std::fixed << std::setprecision(2);

    for (double value : values) {
        std::cout << value << '\n';
    }
}
3.14
2.50
0.00

La première valeur est arrondie à l’affichage, la deuxième est présentée avec un chiffre fractionnaire final et la troisième est formatée avec la même précision de deux décimales. Le code et les libellés visibles des exemples restent en anglais. Le formatage modifie la représentation affichée ; il ne change pas les valeurs stockées et ne rend pas les calculs en virgule flottante exacts. Pour afficher trois chiffres après la virgule, utilisez std::setprecision(3).

Le flux conserve std::fixed et la précision choisie pour les insertions ultérieures de valeurs à virgule flottante. Définissez une autre précision si les valeurs suivantes doivent être affichées différemment. Les manipulateurs sont déclarés dans <iomanip>.

Aligner des valeurs avec std::setw et std::setfill

Pour présenter des colonnes, std::setw(width) définit une largeur minimale pour le champ de la prochaine valeur insérée. Il ne tronque pas une valeur qui nécessite plus d’espace, et la largeur est réinitialisée après cette insertion. std::setfill(ch) sélectionne le caractère de remplissage et reste actif jusqu’à ce qu’il soit modifié. Par défaut, les nombres sont alignés à droite.

Cet exemple complet utilise des points comme caractères de remplissage et réserve un champ de huit caractères à chaque nombre formaté :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <iomanip>
#include <iostream>

int main() {
    std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
              << std::setw(8) << 12.5 << '\n'
              << std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75

Réappliquez std::setw pour chaque valeur qui doit avoir une largeur de champ ; changer le caractère de remplissage ne définit pas de largeur. Choisissez une largeur suffisante pour le signe, les chiffres, la virgule et les chiffres fractionnaires attendus.

Formater avec printf

Les programmes C++ peuvent également utiliser printf depuis <cstdio>. Dans sa chaîne de format, %.2f affiche une valeur à virgule flottante avec deux chiffres après la virgule ; modifiez 2 pour choisir un autre nombre de chiffres.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <cstdio>

int main() {
    const double value = 1.41421;
    std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41

Avec printf, %f est le spécificateur de conversion en virgule flottante pour un argument de type double. Le spécificateur de format doit correspondre au type de l’argument ; une association incorrecte peut entraîner un comportement indéfini. Cet exemple est un programme C++ complet et n’a pas besoin des en-têtes des flux.

Choisir entre les flux C++ et printf

Utilisez std::cout avec std::fixed et std::setprecision si vous souhaitez un formatage par flux C++ qui s’enchaîne avec d’autres insertions et conserve le type de chaque valeur. Utilisez printf si vous travaillez avec des chaînes de format de style printf existantes ou si cette syntaxe vous convient mieux. Les deux méthodes sont valides en C++.

Pour afficher un nombre fixe de décimales, pensez à combiner std::fixed et std::setprecision ; le manipulateur de précision seul a une autre signification dans le format par défaut du flux. Utilisez std::setw et std::setfill pour compléter les colonnes, et réappliquez std::setw avant chaque valeur, car sa largeur ne s’applique qu’une fois.