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

 C Discussion :

Extraire la partie décimale d'un float


Sujet :

C

  1. #1
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut Extraire la partie décimale d'un float
    Bonjour,
    je voudrais extraire la partie décimale d'un float et la rendre entiere .
    Exemple:
    si j'ai 4.2
    donc j'aurais la partie entiere est 4 et la partie décimale est 2 et je voudrais que mon programme retourne 4 et 20 (20= 2*10) or mon code me retourne 19 au lieu de 20 , une aide?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    float n;
    int r;
    int i;
     
        do
        { printf("How much ? \n");
        n=GetFloat();
     
        }while(n<0); 
         i=(int)n;
              printf("%d\n",i);
        r=(n-(int)n)*100;
             printf("%d\n",r);

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    Peut-être qu'en utilisant le modulo.... :/

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 50
    Par défaut
    Bonjour,

    En stockant la partie décimale dans un float, qu'est-ce que cela affiche ?

    Par exemple :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
      float n;
      float r;
      int i;
     
      printf ("How much ?\n");
      scanf("%f", &n);
     
      i = (int)n;
      printf ("%d\n", i);
      r = (n-(int)n)*100;
      printf ("%f\n", r);
     
      return EXIT_SUCCESS;
    }

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    j'avoue que je ne sais pas trop comment marche ce Getfloat() .... Le mieux serait probablement le scanf Julien ^^

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    4.2 n'est pas représentable exactement dans un flottant. Probablement, la valeur exacte codée à la place de 4.2 est 4.1999999....

  6. #6
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Citation Envoyé par diogene Voir le message
    4.2 n'est pas représentable exactement dans un flottant. Probablement, la valeur exacte codée à la place de 4.2 est 4.1999999....
    Justement et je veux contourner ce problème

  7. #7
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Citation Envoyé par Learner_ Voir le message
    j'avoue que je ne sais pas trop comment marche ce Getfloat() .... Le mieux serait probablement le scanf Julien ^^
    GetFloat est une fonction que je dois utiliser (c'est dans le cadre de mes etudes..)

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    ah d'accord ^^ Aurais-tu plus de précision dessus ?
    En tout cas, c'est bizarre, quand je prends ton code, il me fait plein d'erreurs ^^" notamment sur le while ^^
    Pourquoi fait-tu (n<0) en tant que condition?

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par kryptong Voir le message
    Justement et je veux contourner ce pb
    Tu ne peux pas : comment savoir si tu as voulu mettre dans ce float 4.2 ou vraiment 4.199999... ?

    Ou alors ce que tu veux faire est un arrondi au plus proche à la nième décimale, mais ce n'est pas dans ta présentation de la question.

  10. #10
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Citation Envoyé par Learner_ Voir le message
    ah d'accord ^^ Aurais-tu plus de précision dessus ?
    En tout cas, c'est bizarre, quand je prends ton code, il me fait plein d'erreurs ^^" notamment sur le while ^^
    Pourquoi fait-tu (n<0) en tant que condition?
    parce que je veux que mon float soit positif

  11. #11
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Citation Envoyé par diogene Voir le message
    Tu ne peux pas : comment savoir si tu as voulu mettre dans ce float 4.2 ou vraiment 4.199999... ?

    Ou alors ce que tu veux faire est un arrondi au plus proche à la nième décimale, mais ce n'est pas dans ta présentation de la question.
    j'ai saisi 4.2 si c'est ce que tu veux dire

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 50
    Par défaut
    Si l'utilisateur saisit la valeur 4.385, qu'est-ce que le programme est censé afficher ?

  13. #13
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 183
    Par défaut
    Citation Envoyé par Julien Sanchez Voir le message
    Si l'utilisateur saisit la valeur 4.385, qu'est-ce que le programme est censé afficher ?
    bah disons que pour le moment , je me soucie pas de trois chiffres après la virgules.deux suffisent

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 50
    Par défaut
    Donc on part du principe que l'utilisateur saisit un nombre décimal avec au plus deux chiffres après la virgule.

    Dans ce cas, il faut isoler la partie décimale dans une variable de type float, la multiplier par 100, puis arrondir cette valeur à l'entier le plus proche.

    Pour cela, nous avons besoin d'écrire une fonction qui prend en argument un nombre décimal, et qui renvoie l'entier le plus proche :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int arrondi (float nombre_decimal)
    {
      /* renvoyer l'entier le plus proche */
    }

  15. #15
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 19
    Par défaut
    Re!

    Alors, voilà peut-être quelquechose qui pourra t'aider (même si ce code ne fait qu'afficher 0.0000 en ce qui concerne après la virgule...)


    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
     
    #include <Stdio.h>
     
    main()
    {
            float partie_entiere;
            float partie_dec;
            long nombre;
            printf("%s", "Entrez un nombre en virgule flottante : ");
            scanf("%ld",&nombre);
            partie_dec = nombre - (nombre/1.);
            partie_entiere = nombre / 1.;
            printf("%s %3.0f\n %s %f \n", "Partie Entière :", partie_entiere, "Partie décimale :", partie_dec);     
     
    }

  16. #16
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Utiliser fgets() et non scanf() pour récupérer le nombre ? Ainsi, on aura la valeur exacte de la partie entière, on la convertit et on la met dans un int ?

Discussions similaires

  1. Extraire la partie décimale d'un nombre
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 28/09/2016, 13h47
  2. Extraire la partie décimal d'un float en c
    Par souhe_nits dans le forum Débuter
    Réponses: 5
    Dernier message: 22/03/2011, 17h15
  3. Extraire la partie décimale d'un nombre
    Par Najua dans le forum SAS Base
    Réponses: 1
    Dernier message: 22/09/2010, 18h54
  4. Réponses: 15
    Dernier message: 30/01/2008, 18h23
  5. Extraire la partie décimale d'un nombre
    Par Kant2006 dans le forum C++
    Réponses: 19
    Dernier message: 16/06/2006, 20h05

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