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

Florent - 6 août 2006 à 19:23 - Dernière réponse : fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention
- 14 févr. 2016 à 18:00
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 :)
Afficher la suite 

15 réponses

+75
Utile
#include <math.h>

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

voili voilou
Cette réponse vous a-t-elle aidé ?  
ghiz 39 Messages postés lundi 28 août 2006Date d'inscription 16 août 2008 Dernière intervention - 28 août 2006 à 16:24
+15
Utile
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!
mamiemando 28160 Messages postés jeudi 12 mai 2005Date d'inscriptionContributeurStatut 14 février 2018 Dernière intervention - 6 août 2006 à 21:43
+13
Utile
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
+2
Utile
6
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
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 27 juin 2013 à 14:15
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 ,
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 27 juin 2013 à 14:45
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
Velocitypulse 2 Messages postés samedi 13 février 2016Date d'inscription 14 février 2016 Dernière intervention - 13 févr. 2016 à 17:09
0
Utile
3
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
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 14 févr. 2016 à 14:52
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 ;-).
Velocitypulse 2 Messages postés samedi 13 février 2016Date d'inscription 14 février 2016 Dernière intervention > fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 14 févr. 2016 à 17:51
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.
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 14 févr. 2016 à 18:00
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+
Radek 22 Messages postés vendredi 18 août 2006Date d'inscription 7 septembre 2006 Dernière intervention - 29 août 2006 à 11:01
-1
Utile
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.