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 :

Ma conversion string en double tronque..


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut Ma conversion string en double tronque..
    Bonjour,

    je suis la proc�dure d�crite dans la faq c++ et j'ai un soucis :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      istringstream   line;
      istringstream   iss;
      string            temp;
      double           value;
     
      //(...)
     
      std::getline( line, temp, tabul );
      iss.str( temp );
      // iss contient 6,4
      iss >> value;
      // value contient 6.0
    la partie d�cimale n'est pas gard�e..

    J'ai essay� de remplacer le ',' par un '.' mais pas plus de succ�s.

    Qu'est ce qui cloche ?

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France, C�te d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par d�faut
    Citation Envoy� par NiamorH Voir le message
    J'ai essay� de remplacer le ',' par un '.' mais pas plus de succ�s.
    Bizarre... c'est un probl�me de locale, pourtant, non?
    As-tu essay� avec un "." et en ajoutant:
    avant l'extraction de value?

  3. #3
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Le probl�me est tout simplement que... la notation des r�els se fait � la mani�re anglaise

    Cela signifie que, lors de la convertion:
    • 6.04 repr�sente une valeur r�elle
    • 6,04 en repr�sente deux

    La solution est donc, une fois que tu es sur que tu as affaire � un r�el, de remplacer, tout simplement, la virgule par un point, du moins, si tu veux que la notation "francaise" soit prise en compte
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  4. #4
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    La solution est donc, une fois que tu es sur que tu as affaire � un r�el, de remplacer, tout simplement, la virgule par un point
    Citation Envoy� par NiamorH
    J'ai essay� de remplacer le ',' par un '.' mais pas plus de succ�s.
    Je pr�cise que je suis sous VC6.

    Mais je viens de tester sous visual 2005 et c'est effectivement la solution. J'ai peut �tre mal fait mon test, je retesterai demain.

    Citation Envoy� par Biozic
    iss.imbue(locale("C"));
    J'essaierai demain aussi. merci.

  5. #5
    Expert confirm�

    Inscrit en
    Ao�t 2006
    Messages
    3 967
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2006
    Messages : 3 967
    Par d�faut
    Sie,
    Citation Envoy� par koala01 Voir le message
    ...
    La solution est donc, une fois que tu es sur que tu as affaire � un r�el, de remplacer, tout simplement, la virgule par un point, du moins, si tu veux que la notation "francaise" soit prise en compte
    Ah bon, maintenant, en fran�ais on met un point comme s�parateur des d�cimales.

    Comme je ne suis pas au courant, je suppose que �a vient de sortir ?

  6. #6
    Membre �prouv�
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    D�tails du profil
    Informations personnelles :
    �ge : 52
    Localisation : France, C�te d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    La solution est donc, une fois que tu es sur que tu as affaire � un r�el, de remplacer, tout simplement, la virgule par un point, du moins, si tu veux que la notation "francaise" soit prise en compte
    Si le flux d'entr�e contient des r�els format�s "� la fran�aise", on doit pouvoir, en choisissant convenablement la locale, se passer de faire un remplacement explicite. Exception (� confirmer): si il y a un s�parateur de millier, comme un espace, l'extraction par >> risque de tomber � l'eau.

  7. #7
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Biozic Voir le message
    Si le flux d'entr�e contient des r�els format�s "� la fran�aise", on doit pouvoir, en choisissant convenablement la locale, se passer de faire un remplacement explicite. Exception (� confirmer): si il y a un s�parateur de millier, comme un espace, l'extraction par >> risque de tomber � l'eau.
    Ce n'est pas impossible...

    Cependant, le mieux serait quand m�me, selon moi, de juste veiller � ce que les informations soient �crites de la mani�re dont on s'attend � ce qu'elles soient lues "nativement" par l'application, c'est � dire, sans espace entre les millilers, et avec un point comme indicateur de partie d�cimale...

    Il sera en effet bien plus simple, � mon sens, d'envisager d'adapter la valeur lue au cas o� son affichage est n�cessaire, de mani�re a permettre une compr�hension "instinctive" de la valeur que de commencer � la maintenir dans un fichier sous cette forme non comprise par l'ordinateur et de devoir la convertir deux fois:
    • une fois pour que le pc la comprenne
    • une fois pour que l'utilisateur ne se m�prenne pas sur la valeur qu'il lit � l'�cran

    Maintenant, ce n'est jamais que mon avis perso... Mais je le partage
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  8. #8
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Ceci marche :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    iss.imbue( std::locale( "French_france" ) );
    Je vais donc l'utiliser.

    Dans mon cas, il n'est pas possible de modifier la source du probleme en rempla�ant les virgules par des points pour les valeurs du fichier lu car ce fichier m'est envoy� par un autre organisme et je dois le traiter tel quel.

    Je pourrais les remplacer avec de tenter l'op�rateur >> ( je pense que j'ai mal fait mon premier test ) mais j'aime bien cette solution avec la locale.

    Merci � tous.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 27/01/2009, 10h30
  2. Probl�me de conversion String en Double
    Par eighty_three dans le forum Langage
    R�ponses: 7
    Dernier message: 19/06/2008, 09h41
  3. conversion string en double
    Par pouletator dans le forum G�n�ral Python
    R�ponses: 4
    Dernier message: 24/10/2007, 10h35
  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