Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sur l'affichage des décimaux

Sujet résolu
    12 juillet 2007 à 10:10:22

    Bonjour,

    voilà, j'ai un problème sur l'affichage de variable de type double sur une fonction.

    Voilà la fonction en question:

    #include <iostream>
    #include "define.h"
    #include <fstream>

    using namespace std;

    void convert1()
    {
        double Fer = 0, Or = 0, Cristal = 0, Naquadah = 0;

        cout << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl;
        cout << "Premi" << E_ACCENT_GRAVE << "re " << E_ACCENT << "tape: Saisie des prix d'origine" << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl << endl;

        cout << "Combien d'unit" << E_ACCENT << "(s) de fer coute l'objet ?" << endl;
        cin >> Fer;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        cout << "Combien d'unit" << E_ACCENT << "(s) d'or coute l'objet ?" << endl;
        cin >> Or;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        cout << "Combien d'unit" << E_ACCENT << "(s) de cristal coute l'objet ?" << endl;
        cin >> Cristal;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        cout << "Combien d'unit" << E_ACCENT << "(s) de naquadah coute l'objet ?" << endl;
        cin >> Naquadah;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
        cout << endl << endl;

        cout << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl;
        cout << "Deuxi" << E_ACCENT_GRAVE << "me " << E_ACCENT << "tape: La conversion" << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl << endl;


        cout << "Vous-voulez convertir: " << endl;
        cout << "  -" << Fer << " unit" << E_ACCENT << "(s) de fer," << endl;
        cout << "  -" << Or << " unit" << E_ACCENT << "(s) d'or," << endl;
        cout << "  -" << Cristal << " unit" << E_ACCENT << "(s) de cristal et" << endl;
        cout << "  -" << Naquadah << " unit" << E_ACCENT << "(s) de naquadah " << endl;
        cout << "En quoi ?" << endl << endl;

        cout << "1.) du fer" << endl;
        cout << "2.) de l'or" << endl;
        cout << "3.) du cristal" << endl;
        cout << "4.) du naquadah" << endl;
        cout << "Votre choix: ";
        int choix = 0;
        cin >> choix;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );

        double resultat = 0;
        double FerB, OrB , CristalB , NaquadahB;

        string unite;
        ofstream temp;

        temp.open("temp.tmp", ios::trunc);

        switch (choix)
        {
            case 1:
                NaquadahB = Naquadah * 5;
                CristalB = Cristal * 5 / 2;
                FerB = Fer;
                OrB = Or * 5 / 4;
                resultat = FerB + OrB + CristalB + NaquadahB;
                cout<< endl << "Cela donne: " << resultat << " unit" << E_ACCENT << "s de fer";
                unite = "de fer";
                break;

            case 2:
                NaquadahB = Naquadah * 4;
                CristalB = Cristal * 2;
                OrB = Or;
                FerB = (Fer * 4) / 5;
                resultat = FerB + OrB + CristalB + NaquadahB;
                cout << endl << "Cela donne: " << resultat << " unit" << E_ACCENT << "s d'or";
                unite = "d'or";
                break;

            case 3:
                NaquadahB = Naquadah * 2;
                CristalB = Cristal;
                OrB = Or / 2;
                FerB = (Fer * 2) / 5;
                resultat = FerB + OrB + CristalB + NaquadahB;
                cout << endl << "Cela donne: " << resultat << " unit" << E_ACCENT << "s de cristal";
                unite = "de cristal";
                break;

            case 4:
                NaquadahB = Naquadah;
                CristalB = Cristal / 2;
                OrB = Or / 4;
                FerB = Fer / 5;
                resultat = FerB + OrB + CristalB + NaquadahB;
                cout << endl << "Cela donne: " << resultat << " unit" << E_ACCENT << "s de naquadah";
                unite = "de naquadah";
                break;

            default:
                cout << "Erreur de saisie, au revoir!" << endl;
                break;
        }
        char cont = 0;

        cout << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl;
        cout << "Derni" << E_ACCENT_GRAVE << "re " << E_ACCENT << "tape: Remise/Augmentation des prix" << endl << endl;
        cout << "-------------------------------------------------------------------------";
        cout << endl << endl << endl;
        cout << "Voulez-vous faire une remise/augmentation de +/- 15\% ?(o/n)" << endl;
        cin >> cont;
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );

        float resultatB = 0;
        double pourcent = 0;

        if(cont == 'o')
        {
            choix = 0;
            cout << "Vous voulez faire:" << endl;
            cout << "1.) Une remise" << endl;
            cout << "2.) Une augmentation" << endl;
            cout << "Saisissez votre choix: ";
            cin >> choix;
            cin.ignore( numeric_limits<streamsize>::max(), '\n' );

            if(choix == 1)
            {
                cout << "Diminuer le prix de combien en pourcent (maximum 15\%) ?" << endl;
                cout << "(si c'est un nombre a virgule, mettre un point a la place de la vigule)" << endl;
                cin >> pourcent;
                if(pourcent <= 15)
                {
                    resultatB = (1 - (pourcent / 100)) * resultat;
                    cout << "Avec une remise de " << pourcent << "\% ,le prix est de " << resultatB << " unit" << E_ACCENT << "s " << unite << endl;
                }
                else
                    cout << "Selon les taux officiels, il est interdit d'aller au dela de 15\%" << endl;
            }
            else if(choix == 2)
            {
                cout << "Augmenter le prix de combien en pourcent (maximum 15\%) ?" << endl;
                cout << "(si c'est un nombre a virgule, mettre un point a la place de la vigule)" << endl;
                cin >> pourcent;
                cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                if(pourcent <= 15)
                {
                    resultatB = (1 + (pourcent / 100)) * resultat;
                    cout << "Avec une augmentation de " << pourcent << "\% ,le prix est de " << resultatB << " unit" << E_ACCENT << "s " << unite << endl;
                }
                else
                    cout << "Selon les taux officiels, il est interdit d'aller au dela de 15\%" << endl;
            }
        }
        else;
    }
     


    Dans le switch, à ce niveau: cout<< endl << "Cela donne: " << resultat ...
    Au lieu de me donner un truc du genre "1375000", la console m'affiche : "1.375e+006"...
    C'est parreil si je l'écrit dans un fichier...
    Comment y remédier ?
    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2007 à 11:10:59

      Hello,

      C'est normal, la précision d'affichage par défaut des flux est de 6 chiffes.Donc tous les nombres de plus 6 chiffres sont mis en notation scientifique. (Ceci est aussi valable pour les nombres à virgules 123.45678 => 1.23456e2

      Pour changer cela, il faut utiliser la bibliothèque <iomanip>

      et modifier le flux. C'est-à-dire:


      #include <iomanip>
      using namespace std;

      //pleins de trucs avant

      cout << setprecision(7) << 13570000 << setprecision(6) << endl;

       


      setprecision(undigned int) permet de spécifier le nombre de chiffres à afficher.

      Il ne faut pas oublier de remettre à 6 après, car sinon on reste à 7 tout le long du programme et l'ordinateur ajoutera des 0 pour compléter TOUS les chiffres.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        13 juillet 2007 à 12:22:32

        C'est bon, merci beaucoup
        • Partager sur Facebook
        • Partager sur Twitter

        Problème sur l'affichage des décimaux

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown