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 régulier
    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
    Points : 78
    Points
    78
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    Par défaut
    Peut-être qu'en utilisant le modulo.... :/

  3. #3
    Membre actif

    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
    Points : 273
    Points
    273
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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 éminent sénior
    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
    Points : 13 926
    Points
    13 926
    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....
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Membre régulier
    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
    Points : 78
    Points
    78
    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 régulier
    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
    Points : 78
    Points
    78
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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 éminent sénior
    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
    Points : 13 926
    Points
    13 926
    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.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #10
    Membre régulier
    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
    Points : 78
    Points
    78
    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 régulier
    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
    Points : 78
    Points
    78
    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 actif

    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
    Points : 273
    Points
    273
    Par défaut
    Si l'utilisateur saisit la valeur 4.385, qu'est-ce que le programme est censé afficher ?

  13. #13
    Membre régulier
    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
    Points : 78
    Points
    78
    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 actif

    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
    Points : 273
    Points
    273
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    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 syntaxlb 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