IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Conversion string vers float - résultat étrange


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    PAS DE POSTE
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : PAS DE POSTE

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Conversion string vers float - résultat étrange
    Bonjour,

    Je souhaite convertir un ensemble de string en valeurs numériques de type double float ou int.
    Je me suis basé sur :
    http://cpp.developpez.com/faq/cpp/?p...NGS_convert_to

    par contre, au niveau des résultats, j'obtiens quelque chose d'étrange.

    J'ai écris une méthode String2Float qui ne fait que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    float String2Float(const string& s)
    {
        return from_string<float>(s);
    }
    Lorsque je teste ma fonction avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        cout << "Converting string \"1234.56789\" into float" << endl;
        float decimalValue = String2Float("1234.56789");
        cout << "Received value is  " << decimalValue << endl << endl;
    j'obtiens alors :

    Converting string "1234.56789" into float
    Received value is 1234.5678710938

    Si j'utilise atof, j'obtiens bien :
    Received value is 1234.56789

    J'ai pensé à un problème d'approximation à cause de cout mais dans le débugger, j'ai bien decimalValue = 1234.5678710938

    Avec les double, aucun problème.
    D'où peut venir ce problème d'approximation avec les float ?
    D'avance merci.

    P.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    C'est bien un problème de précision, probablement que 1234.56789 n'est pas représentable dans un float. Pour mémoire la base des float (ou des double d'ailleurs) est 2, donc ce qui nous semble "tomber juste" en base 10 ne le fait pas forcément dans un nombre à virgule flottante.
    Citation Envoyé par polysil Voir le message
    Si j'utilise atof, j'obtiens bien :
    Received value is 1234.56789
    P.
    d'après ceci, atof renvoie un double.

  3. #3
    Futur Membre du Club
    Profil pro
    PAS DE POSTE
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : PAS DE POSTE

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Effectivement ... En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float decimalValue = 1234.56789f;
    et en évaluant decimalValue sous le débugger j'ai : 1234.56787

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tentative conversion string vers float
    Par firemax dans le forum C
    Réponses: 10
    Dernier message: 21/08/2007, 17h42
  2. [C++] conversion classe string vers float
    Par agrosjea dans le forum C++
    Réponses: 5
    Dernier message: 14/03/2007, 13h45
  3. Conversion String vers Byte
    Par zulianithomas dans le forum Delphi
    Réponses: 8
    Dernier message: 07/10/2006, 10h09
  4. conversion string vers int
    Par mathher dans le forum C++
    Réponses: 4
    Dernier message: 14/04/2006, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo