Problème conversion chaîne en nombre - C++ - Programmation
Marsh Posté le 26-02-2009 à 14:42:23
Utilise un stringstream:
http://www.cplusplus.com/reference [...] tream.html
Marsh Posté le 26-02-2009 à 14:52:04
le 2 c'ets le defaut de représnetation des float en 32/64 bits.
5.78 = 0x40B8F5C3 = 5.7800002
http://babbage.cs.qc.edu/IEEE-754/Decimal.html
Marsh Posté le 26-02-2009 à 18:29:48
baham a écrit : Mon problème, c'est que je me retrouve avec dans mon float : 5.7800002 et dans mon double : 5.7800000000000002 |
Parce que la valeur exacte n'est pas représentable avec les formats flottants habituels. Ces formats permettent de représenter des rationnels avec une puissance de 2 au dénominateur.
Marsh Posté le 26-02-2009 à 19:49:52
Merci pour vos réponses!
Je reste donc sur l'imprécision... Le problème venait surtout du fait que je récupérais une liste de nombre d'un fichiers, et que ces nombres correspondaient à des pourcentages dont je vérifiais que la somme faisait bien 100...
J'ai simplement ajouté un epsilon à mon test.
@+
Marsh Posté le 26-02-2009 à 11:45:38
Bonjour à tous!
Je viens vous voir car je rencontre un problème ; je souhaite convertir une chaîne de caractère en un nombre à virgule (float, double, etc). voilà ce que je fais :
char * pEnd; char c[] = "5.78";
float flt = strtod(c, &pEnd);
double db = strtod(c, &pEnd);
Mon problème, c'est que je me retrouve avec dans mon float : 5.7800002 et dans mon double : 5.7800000000000002
Pourquoi n'ai je pas les valeurs exactes, et d'où vient ce "2"...?
J'ai essayé avec un char* plutôt qu'avec un char[], et la fonction atoi plutôt que strtod, et toujours le même problème...
Aidez moi s'il vous plait!
Merci!