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 :

Conversion d'un string en double


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut Conversion d'un string en double
    Bonjour ,

    Pouvez-vous me dire pourquoi il y a une perte d'info lorsque je convertis un STRING en DOUBLE ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		cout<< CDP1_B3[5][1] << endl ;			
    		cout<< atof(CDP1_B3[5][1].c_str())<< endl ;
    1.8266818
    1.82668

    Merci.

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,
    Parce que la mémoire d'un ordinateur est limitée et qu'il est impossible de représenter tous les nombres à virgule possibles, soit une infinité, avec un double.
    https://en.wikipedia.org/wiki/Floati...n_and_rounding
    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 confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    La méthode utilisée n'est peut-être pas optimisée. Une idée pour conserver de la précision ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,
    ici c'est surtout parce que les valeurs dans les flux utilisent 6 chiffres. Le double a 16 chiffres de précision.
    Mais attention comme le dit Bousk un nombre flottant n'est quasiment jamais égal à une représentation décimale.
    Exemple :
    0.2 * 5 - 1 n'est pas nul!

    Essaie les lignes pour : auto s = "1.826818"s;
    std::cout << std::setprecision(15) << std::atof(st.c_str()) << std::endl;
    std::cout << std::setprecision(20) << std::atof(st.c_str()) << std::endl;

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    La seule solution pour conserver de la précision c'est de ne pas utiliser des doubles mais des entiers et une virgule fixe.
    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.

  6. #6
    Membre actif Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Par défaut
    Avec le atof sa ne va pas marcher.....par ce que le double a une précision de 6 chiffre après la virgule...donc c'est a toi de faire ton propre type qui va rependre a tes exigence

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Avez-vous des doc me permettant de me former à cet exercice ?

    Merci.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 307
    Par défaut
    Citation Envoyé par Bousk Voir le message
    La seule solution pour conserver de la précision c'est de ne pas utiliser des doubles mais des entiers et une virgule fixe.
    Pour sauver un double dans une chaine, la solution qu'il m'arrive d'utiliser est de copier les 8 octets du double (64 bits) dans un long long (64 bits) et de sauver le long long. Pour la relecture c'est l'inverse, l'avantage de la méthode c'est d'avoir le même double (avant et après). Typiquement cela me sert à reproduire un problème...

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

Discussions similaires

  1. [VB.NET] Conversion de String en Double
    Par JB-Tech dans le forum Windows Forms
    Réponses: 9
    Dernier message: 26/02/2018, 07h32
  2. Conversion d'une string en double
    Par DotNET74 dans le forum Windows Phone
    Réponses: 2
    Dernier message: 16/09/2012, 19h24
  3. Conversion d'un String en Double dans une JSP
    Par demcoul dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 18/04/2012, 18h00
  4. conversion string en double
    Par kakrocq dans le forum C++/CLI
    Réponses: 4
    Dernier message: 11/04/2007, 13h54
  5. conversion string en double
    Par zmatz dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/10/2005, 22h46

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