[C] Extraire partie entière et partie décimal [Résolu/Fermé]

Signaler
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Hello !

J'ai un souci en C : je cherche à réaliser un programme, et à un moment j'ai besoin de récupérer la partie entière et la partie décimale d'un nombre dans deux variables différentes.

Par exemple, si j'ai un nombre 4.1256, j'aimerais obtenir :
var1 = 4
var2 = 1256

En php, il existe des fonctions pour cela, mais en C j'ai rien trouvé :S Je m'en remets donc à vous, en espérant que quelqu'un pourra me filer un coup de pouce !

Bonne soirée, merci d'avance :)

6 réponses

#include <math.h>

float a = 1.5;
// partie entière
int o = floor(a);
// partie décimale
float u = a-o;

voili voilou
94
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
39
Date d'inscription
lundi 28 août 2006
Statut
Membre
Dernière intervention
16 août 2008
17
tu peux utiliser pour extraire la partie entière la fonction floor qui se trouve dans la bibliothèque math.h, elle reçoit le double et retourne sa partie entière.
bonne chance!
Messages postés
29880
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
7 120
Tu peux faire un truc du genre :
double x =  4.125
int partent = (int) x; // 4
double partdec = x - partent; // 0.1256

Pour compter le nombre de décimal tu peux feinter en écrivant la partie décimale dans une chaîne et compter le nombre de caractère :
char buffer[255];
unsigned int nb_dec;
sprintf(buffer,"%lf",partdec);
nb_dec=strlen(buffer)-2; // ou truc dans le genre, le -2 sert à zapper le '0.'

Bonne chance
voila le programme ici

http://tutodev1.blogspot.com/2013/06/VAR.html
tout les variable sont utile,pour que le programme marche .
et pour la chaine de caractere
elle nos ide pour utilise sscanf
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
tout les variable sont utile,pour que le programme marche
La variable utilisée pour le séparateur entre les parties entière et décimale ne sert à rien... Tu peux t'en passer très facilement...

elle nos ide pour utilise sscanf
Tu peux traduire ?
pour que la fonction sscanf() marche la variable dois être un chaîne de caractère ,
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Oui c'est ce que je reproche à ta solution. Garde à l'esprit qu'il ne faut pas adapter le problème à la solution, mais le contraire ;-)
Le point de départ est un nombre pas une chaîne, donc exit sscanf(). Ou alors, on convertit le nombre en chaîne.
ah oui; merci
Je vais travailler sur cette probleme
Messages postés
2
Date d'inscription
samedi 13 février 2016
Statut
Membre
Dernière intervention
14 février 2016
2
Salut !
Voici ma solution

#include <math.h>
float pi = 3.141592;

printf("\nFloat : %f\nEntier : %d\nDecimal : %d\n",
pi, (int)pi, (int)((pi - (int)pi) * 1000000));
printf("\nFloat : %f\nEntier : %d\nDecimal : %d\n",
pi, (int)pi, (int)((pi - (int)pi) * 1000));

Resultat :
Float : 3.141592
Entier : 3
Decimal : 141592

Float : 3.141592
Entier : 3
Decimal : 141

je precise que les resultats peuvent etre rentré dans des int. (ce sont bien des %d dans le printf !)
Enjoy ! :D
#42
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Attention aux déterrages...
L'approximation de PI est plutôt : 3.141593 (et non 3.141592).
Note, tu peux utiliser : 4*atan(1.0).
De plus, il vaut mieux utiliser des double.
Sinon, le reste est correcte et se rapproche de la mêthode de mamiemando donnée 10 ans plus tôt ;-).
Messages postés
2
Date d'inscription
samedi 13 février 2016
Statut
Membre
Dernière intervention
14 février 2016
2 >
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016

Salut Fiddy
Ma source pour PI : https://fr.wikipedia.org/wiki/Pi

Sinon à la difference de ta methode, c'est que je n'ai pas besoin d'aller chercher la signification de 4*atan(1.0).
Si j'ai répondu c'est uniquement car j'ai éstimé que j'avais mis trop de temps a chercher une solution assez simple.
Et puis en se qui concerne les doubles, cela relève du choix de chaque developpeur ici présent.
Désoler pour le deterrage.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Oui, ta source dit : Pi = 3,141 592 653..., soit Pi=3,141593 (et non 3,141592).

L'astuce 4*atan(1.0) n'était qu'un conseil pour éviter les erreurs d'approximation de Pi. C'est d'ailleurs la méthode recommandée, tout comme la préférence pour les doubles.

A+
Messages postés
22
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
7 septembre 2006
6
Tu peux convertir ton nombre en chaine de carateres et utiliser les fonctions sur les chaines de caracteres. Par exemple tu peux utiliser strsep. Qui coupera ta chaine en deux chaines. Apres tu reconvertis tes 2 chaines en entiers si tu veux que ce soit des numériques.

Tu trouveras une liste de fonctions ici :
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/string.3.html

Bonne continuation.