Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/01/2013, 11h13   #1
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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 :
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);
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 14h25   #2
Learner_
Invité régulier
 
Étudiant
Inscription : janvier 2013
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2013
Messages : 19
Points : 5
Points : 5
Peut-être qu'en utilisant le modulo.... :/
Learner_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 15h02   #3
Julien Sanchez
Membre éclairé
 
Avatar de Julien Sanchez
 
Homme Julien Sanchez
Étudiant
Inscription : décembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Julien Sanchez
Âge : 25
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2012
Messages : 50
Points : 392
Points : 392
Bonjour,

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

Par exemple :

Code C :
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;
}
__________________
Un logiciel est libre si vous avez le droit d'étudier son code source, de le modifier et de le redistribuer.
GNU/Linux est un logiciel libre, alors que Windows et Mac OS ne le sont pas. (aide)
Julien Sanchez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 15h06   #4
Learner_
Invité régulier
 
Étudiant
Inscription : janvier 2013
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2013
Messages : 19
Points : 5
Points : 5
j'avoue que je ne sais pas trop comment marche ce Getfloat() .... Le mieux serait probablement le scanf Julien ^^
Learner_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 15h10   #5
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 434
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 434
Points : 12 955
Points : 12 955
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/01/2013, 17h05   #6
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 17h05   #7
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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..)
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 17h30   #8
Learner_
Invité régulier
 
Étudiant
Inscription : janvier 2013
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2013
Messages : 19
Points : 5
Points : 5
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?
Learner_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 17h35   #9
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 434
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 434
Points : 12 955
Points : 12 955
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2013, 18h29   #10
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 18h30   #11
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 18h38   #12
Julien Sanchez
Membre éclairé
 
Avatar de Julien Sanchez
 
Homme Julien Sanchez
Étudiant
Inscription : décembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Julien Sanchez
Âge : 25
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2012
Messages : 50
Points : 392
Points : 392
Si l'utilisateur saisit la valeur 4.385, qu'est-ce que le programme est censé afficher ?
__________________
Un logiciel est libre si vous avez le droit d'étudier son code source, de le modifier et de le redistribuer.
GNU/Linux est un logiciel libre, alors que Windows et Mac OS ne le sont pas. (aide)
Julien Sanchez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 18h41   #13
kryptong
Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 160
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 160
Points : 43
Points : 43
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
kryptong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 19h44   #14
Julien Sanchez
Membre éclairé
 
Avatar de Julien Sanchez
 
Homme Julien Sanchez
Étudiant
Inscription : décembre 2012
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Julien Sanchez
Âge : 25
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2012
Messages : 50
Points : 392
Points : 392
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 :
1
2
3
4
int arrondi (float nombre_decimal)
{
  /* renvoyer l'entier le plus proche */
}
__________________
Un logiciel est libre si vous avez le droit d'étudier son code source, de le modifier et de le redistribuer.
GNU/Linux est un logiciel libre, alors que Windows et Mac OS ne le sont pas. (aide)
Julien Sanchez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 21h44   #15
Learner_
Invité régulier
 
Étudiant
Inscription : janvier 2013
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2013
Messages : 19
Points : 5
Points : 5
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 :
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);     
 
}
Learner_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 22h01   #16
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 704
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 704
Points : 4 176
Points : 4 176
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 ?
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h09.


 
 
 
 
Partenaires

Hébergement Web