219 votes

Impression du nombre correct de points décimaux avec cout

J'ai une liste de float et je veux les imprimer avec cout avec 2 décimales.

Par exemple :

10.900  should be printed as 10.90
1.000 should be printed as 1.00
122.345 should be printed as 122.34

Comment puis-je le faire ?

( setprecision ne semble pas aider dans ce domaine).

322voto

beduin Points 2742

Avec <iomanip> vous pouvez utiliser std::fixed et std::setprecision

Voici un exemple

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    std::cout << d;
}

Et vous obtiendrez la sortie

122.34

21 votes

Pourquoi utiliser "std:fixed" dans le programme ?

7 votes

Un en-tête utile peut être défini à cet effet : #define FIXED_FLOAT(x) std::fixed <<std::setprecision(2)<<(x) ce qui simplifie l'utilisation : cout<<FIXED_FLOAT(d)

26 votes

@VilasJoshi, setprecision définit le nombre de chiffres après la décimale, s'il y a 5 chiffres et que nous utilisons setprecision(2), nous aurons 2 chiffres, mais s'il y a 0 chiffres, il n'y en aura aucun, en utilisant fixed nous fixons le nombre de chiffres à afficher, ainsi 5 sera représenté par 5.00 et non 5.

60voto

Vusak Points 698

Vous y étiez presque, il faut utiliser std::fixed aussi, se référer à http://www.cplusplus.com/reference/iostream/manipulators/fixed/

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

    std::cout << std::setprecision(2) << std::fixed;

    for(int i = 0; i < 6; ++i)
    {
        std::cout << testme[i] << std::endl;
    }

    return 0;
}

sorties :

0.12
1.23
12.35
123.45
1234.50
12345.00

22voto

QuantumMechanic Points 7825

setprecision(n) s'applique au nombre entier, et non à la partie fractionnaire. Vous devez utiliser le format à virgule fixe pour qu'il s'applique à la partie fractionnaire : setiosflags(ios::fixed)

19voto

einverne Points 761

Simplifiez la réponse acceptée

Exemple simplifié :

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;
    std::cout << std::fixed << std::setprecision(2) << d;
}

Et vous obtiendrez la sortie

122.34

Référence :

0 votes

Cela a fonctionné pour moi : std::cout << std::setprecision(2) << std::fixed << d ;

11voto

J'avais un problème pour les nombres entiers tout en voulant un formatage cohérent.

Une réécriture pour l'exhaustivité :

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    //    floating point formatting example
    cout << fixed << setprecision(2) << 122.345 << endl;
    //    Output:  122.34

    //    integer formatting example
    cout << fixed << setprecision(2) << double(122) << endl;
    //    Output:  122.00
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X