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

C++ Discussion :

Convertir une string en float sans perte de précision


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Points : 0
    Points
    0
    Par défaut Convertir une string en float sans perte de précision
    Bonjour,

    Je souhaiterais pourvoir convertir un std::string en float sans perdre de précision et de manière générique mais je n'arrive pas à trouver de solution. Avec stringstream si ma string vaut 500.5547, quand je fais stringstream >> float, mon float vaut 500.55 car il arrondie....
    Si vous auriez une idée je suis preneur
    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    tu dois avoir des options de setPrecision.
    Mais sache que dans tous les cas tu auras une perte d'informations, tout simplement parce que certaines valeurs flottantes sont justes impossibles à représenter sur le modèle binaire de la machine.
    Un double devrait minimiser cette erreur, sans la supprimer.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par lirycs78 Voir le message
    mon float vaut 500.55 car il arrondie....i
    Comment as-tu contrôlé la valeur de ton float ? Si tu l'as affiché dans std::cout, c'est plutôt lui qui a arrondi.

    Un float récupéré de la chaîne 500.5547 vaudra en fait 500.554688 (tu peux vérifier avec un débuggueur) à cause de l'approximation flottante, qui provient de la représentation en mémoire des nombres flottants.

    Plus d'infos sur cet excellent lien et dans ce sujet ainsi que celui-ci.
    Find me on github

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 83
    Points : 0
    Points
    0
    Par défaut
    Merci de vos réponse, effectivement le problème viens de std::cout

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

Discussions similaires

  1. [C#] Comment convertir une String en float ?
    Par DestinyWar45 dans le forum C#
    Réponses: 7
    Dernier message: 08/10/2010, 04h19
  2. Réponses: 3
    Dernier message: 06/06/2008, 14h35
  3. Comment convertir une string en boolean ?
    Par olivier12345600 dans le forum Langage
    Réponses: 6
    Dernier message: 25/06/2005, 15h54
  4. Convertir une string en image
    Par worldchampion57 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/05/2005, 09h55
  5. [Firebird] Convertir une String en date
    Par laffreuxthomas dans le forum SQL
    Réponses: 1
    Dernier message: 04/05/2005, 19h42

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