IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

arrondi de double en c ou c++


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Points : 56
    Points
    56
    Par défaut arrondi de double en c ou c++
    bjrs

    est-ce qq'un peut me dire si il connait une fonction en c ou c++ ou dans la MFC pour arrondir des doubles à 2 chiffres après la virgule ?

    Voir du code ou une procedure ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Avec du code, je pense qu'on peut faire ça comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    double l_mydouble = 20,2467;
     
    double l_dblTemp = l_mydouble  * 100;
    int      l_iTemp    = (int) (l_dblTemp);
     
    // Arrondi Superieur
    if ((l_dblTemp - l_iTemp) > 0.5)
    {
        l_mydouble = (l_iTemp + 1)/100;
    }
    // Arrondi Inferieur
    else
    {
        l_mydouble = (l_iTemp)/100;
    }
    Ca devrait bien marcher, je pense...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 62
    Points
    62
    Par défaut
    j'ai fait une recherche rapide sur google (he oui).
    y'a un PDF qui semble sympa à ce sujet.
    Sinon en 2 coups d'oeil ce qui semble utilisé c'est ceil() et floor()
    renseigne-toi

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Points : 56
    Points
    56
    Par défaut
    Merci les gars , mais j'ai trouvé une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    code
     
      double n;
      double x = 0.8236547
      double y = modf(x*100,&n);
     
      n = n/100 ;
     
      => n est représenté avec 2 chiffre après la virgule

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    #include <iostream>
    #include <string.h>
    //*************** arrondi superieur ou inferiieur **********
    using namespace std ;

    int main()
    {
    double l_mydouble = 0;
    char chaine[20];

    cout << " entrez un chiffre a vigule : "<<endl;
    cin >> l_mydouble;
    cout <<" vous les vous l'arrondi superieur ou inferieur ? " ;
    cin >> chaine;
    double l_dblTemp = l_mydouble * 10;
    int l_iTemp = (int) (l_dblTemp);
    if (strcmp(chaine , "superieur")==0)
    {
    cout << "Arrondi Superieur"<<endl;
    l_mydouble = (l_iTemp + 10)/10;
    cout<< l_mydouble<<endl;
    }

    else
    {

    cout << "Arrondi Inferieur"<<endl;
    l_mydouble = (l_iTemp)/10;
    }
    cout << l_mydouble << endl;
    return 0;
    }

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu es censé coder en C++, pas en "C sur un compilo C++": Pourquoi utilises-tu un tableau de char (et strcmp) plutôt qu'une std::string?
    Aussi, es-tu sûr de cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l_mydouble = (l_iTemp + 10)/10;
    Normalement, quand on arrondit au supérieur, on n'ajoute pas le diviseur, mais la valeur juste en-dessous (e.g. pour des entiers, on écrirait +9).

    Ou plus simplement, pour des nombres à virgule flottante on utiliserait ceil().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour

    Je commence tout juste la programmation, c'est les seul fonction que j'ai su utiliser, merci de m'avoir repris.

    est ce que c'est possible que vous me faite le même programme, mais avec de meilleur fonction ?

    merci par avance

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Personnellement, j'aurais fait comme ceci:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <cmath>
    //*************** arrondi superieur ou inferiieur **********
    using namespace std ;
     
    int main()
    {
    	double mydouble = 0;
    	string chaine, dummy;
     
    	//Si on fait cin >> mydouble, on se retrouve avec le caractère \n qui reste dans cin.
    	//Pour éviter ce problème, on lit toute une ligne puis on convertit avec un istringstream.
    	cout << "Entrez un nombre a vigule : "<<endl;
    	getline(cin, chaine);
    	istringstream(chaine) >> mydouble;
    	cout << "Vous avez entre : " << mydouble << endl;
     
    	//On lit la chaîne normalement
    	cout <<"Voulez-vous l'arrondi superieur ou inferieur ? " ;
    	getline(cin, chaine);
     
    	//On est obligé de multiplier pour décaler la virgule, car
    	//le standard ne donne pas de fonction d'arrondi à X chiffres:
    	//les fonctions C++ arrondissent toujours à l'entier choisi.
    	//Pas grave, on re-décalera dans l'autre sens après en divisant.
    	double dblTemp = mydouble * 100.0;
    	double dblArrondi;
    	if (chaine == "superieur")
    	{
    		cout << "Arrondi Superieur :"<<endl;
    		dblArrondi = ceil(dblTemp)/100.0;
    	}
    	else
    	{
    		cout << "Arrondi Inferieur :"<<endl;
    		dblArrondi = floor(dblTemp)/100.0;
    	}
     
    	//Maintenant, on a notre double arrondi à deux chiffres.
    	cout << dblArrondi << endl;
    	return 0;
    }

    Ce code utilise entièrement du C++ standard, indépendant de MFC.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CString.Format : arrondi de double
    Par melleb dans le forum MFC
    Réponses: 5
    Dernier message: 26/01/2009, 17h55
  2. float, double et arrondi
    Par simla dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2007, 15h22
  3. Double arrondi sur un dataset
    Par isachat666 dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/06/2006, 13h07
  4. [C++] faire un arrondi sur un double
    Par pavlacki dans le forum C++
    Réponses: 6
    Dernier message: 13/11/2005, 16h50
  5. arrondi avec type double
    Par la drogue c'est mal dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2005, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo