Comparaison en C++

alocmoa -  
phneveu Messages postés 2 Statut Membre -
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

  1. Bob
     
    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.
    0
  2. alocmoa
     
    le but c'est de comparer un nombre (décimal ou entier) avec la partie entiere de ce même nombre.
    0
  3. Bob
     
    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;
    0
  4. alocmoa
     
    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 ??
    0
    1. dje-dje
       
      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.. .
      0
    2. dje-dje
       
      Bref si tu ne veux pas la partie entierer superieur, tu n'aoute pas 1 à m dans ton "cout"
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bob
     
    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.
    0
  7. dje-dje
     
    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
    0
  8. dje-dje
     
    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
    0
  9. phneveu Messages postés 2 Statut Membre
     
    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);
    }
    0
  10. phneveu Messages postés 2 Statut Membre
     
    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.
    0