Utilisateur anonyme
-
23 déc. 2007 à 11:49
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
23 déc. 2007 à 14:01
Bonjour,
J'ai un problème de conversion entre un float et un entier.
Je récupère dans un fichier, sous le type float, une valeur décimale, trois chiffres après la virgule
(genre 0.253) que l'on appelle d.
Je voudrais récupérer juste les trois chiffres, sous la forme d'un entier.
J'ai fait :
(int) coef*d
avec coef=1000
mais on me ressort 252.
Après petite enquète, en fait, l'ordi considère 0.2529.. au lieu de 0.253, et donc via la conversion explicite, tronque la partie fractionnaire, et me garde que le 252. Est-ce possible de faire un arrondi supérieur ou un arrondi au plus près avant de faire la conversion explicite ?
Si oui, quelle fonction et quelle librairie à appeler?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 23 déc. 2007 à 14:01
Il est bien entendu possible de faire tous les types d'arrondi que l'on veut mais ce serait ici totalement contre productif.
Tu recup ton float dans une chaine, tu pousses un pointeur jusque derrière le point, et tu fais direct une conversion sur des entiers.
exemple si tu as récupéré:
char buf[24], *c;
int n;
strcpy(buf, "0.253"); // SIMULE TA RECUP DEPUIS FICHIER
c = buf; // ON PLACE *c DERRIERE LE POINT
while(*c) {
if(*c++ == '.') break;
}
n = atoi(c);