[C] problème de onversion char -> float

Résolu/Fermé
Samsagace - 17 mai 2005 à 16:05
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 17 mai 2005 à 18:22
Explication du problème:
je lis dans un fichier txt exporté depuis Excel et je désire récupéré les réels ( ex: "132.2456")

J'arrive ss problème à découper mon fichier en ligne puis en nombre

Pour la conversion, j'utilise la fonction sscanf vu que c la seule que j'ai trouvé, mais je vois apparaître des caractère fantôme à l'affichage et lors de calcul...

Je m'explique: j'ai ma chaîne "132.2456" qui se termine correctment par un \0

mais apres la conversion, le float correspond est " 132.245602"
vu que j'ai besoin de faire des calculs exacts cette approximation à la fin est inadmissible....

J'ai developpé ma propre fonction sscanf mais meme topo.

J'ai allongé la chaîne pour avoir les 6 décimales apres la virgule, mais meme topo....

Je n'arrive pas à comprendre d'ou vient le probleme...

J'utilise actuellement la plateforme Dev C++ sous Windows.

Merci de l'aidde que vous pourrez m'apporter car la je commence à criser de ces caractères fantômes..

3 réponses

Salut !

essayes peut etre avec strtof.
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
17 mai 2005 à 18:05
bonjour

float 32 bits portée : 3.4 * (10**-38) to 3.4 * (10**+38)
au delà de 6 chiffres significatif, le type float est aproximatif
peut être que le type double (flotant double précision)
serait utile ?

a+
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
17 mai 2005 à 18:22
Ca me semble vraiment bizarre que ton sscanf se foire.

Passe-tu bien la bonne chaîne ? La scannes-tu corrctement (tu sais l'histoire des doubles simple précision et double précision..) ?

" 3121.13 " ---> se scanne avec " %lf " en pensant bien à mettre les espace entre les guillemets et le %lf pour faire sauter les espaces et/ou les tabulations.

Si ce n'est rien de tout ça est tu sûr que tu ne tape pas dans cette zone mémoire par erreur ?

Bonne chance
0