Comparaison en C++

Voilà,

J'aimerais pouvoir comparer un nombre à sa partie entière( cad pouvoir dire si un nombre est décimal ou entier). Comment puis-je faire. Ca fait un moment que je tourne en rond sur cette question et là je craque !

merci

9 réponses

  • Votes
  • Date
  • Date décroissante
  1. Tu castes ton "float" dans un "unsigned int" comme suit:

    ...
    float valeur1 ;
    unsigned int valeur2;
    valeur 1 = 3.141592
    unsigned int valeur2 = (unsigned int)valeur2;
    ...

    puis reste à comparer 2 entiers.
    1. le but c'est de comparer un nombre (décimal ou entier) avec la partie entiere de ce même nombre.
      1. Bah ça change pas grand chose t'affecte une variable supplémentaire pour contenir sa partie entiere du style:

        float valeur1;
        float valeur2;
        valeur 2 = (float)(unsigned int)valeur1;

        ou bien

        float valeur1;
        unsigned int valeur2;
        float valeur3;
        valeur2 = (unsigned int)valeur1;
        valeur3 = (float)valeur2;
        1. Voilà le code que je génère

          float m=0;
          float M;
          M= (float)(unsigned int)m;

          cout<<"entrer un nombre decimal"<<endl;
          cin>>m;

          if (m!=M)
          cout<<"la partie entiere superieure est:"<<int(m)+1<<endl;
          else
          cout<<"la partie entiere superieure est:"<<M<<endl;

          Le truc c'est qu'il me sort 3 pour 2,6 mais pour 2 il me sort 3

          Quel est le problème dans mon code ??
          1. C'est le résultat que tu dois trouver:la partie entière supérieur d'un nombre c'est 1+partie entiere. La partie entière de 2 c'est 2 donc la partie entiere superieur de 2 c'est 3.. .
          2. Bref si tu ne veux pas la partie entierer superieur, tu n'aoute pas 1 à m dans ton "cout"
        2. La 1ère méthode que j'ai donnée c'était plutôt du "expérimental" essaie la 2nde elle me parait plus sur.
          1. J'ai trouvé ca dans une autre réponse:
            "
            n:reel;
            s:entier;
            début
            lire(n);
            s=n div1; {div fait la division entière d'1 nbre qlcq}
            afficher ('la partie entière de ',,'est ',s);
            "

            le div est "%" en langage C
            1. Desole j'ai pas fini:
              une fois que tu as le nombre et sa partie entiere, tu soustrait l'un à l'autre. Si ils sont égaux le nombre est entier, sinon il ne l'est pas
              1. Je suis peut-être à côté de la plaque mais il semble que ce petit bout de code doit marcher (du moins il marche sous VC 6 et sur ma machine) :

                BOOL IsDecimal(double dNum)
                {
                ASSERT(dNum <= double(UINT_MAX));
                UINT uNum = dNum;
                double diff = (double)uNum - dNum;
                return (!diff ? TRUE : FALSE);
                }
                1. Erratum :
                  Evidemment, il fallait lire dans le message n°10,

                  return (diff ? TRUE : FALSE);

                  et non, comme écrit stupidement :

                  return (!diff ? TRUE : FALSE);

                  Mille excuses.