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

Boost C++ Discussion :

[Debutant] Arrondi non voulu avec Boost::lexical_cast


Sujet :

Boost C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 9
    Points
    9
    Par défaut [Debutant] Arrondi non voulu avec Boost::lexical_cast
    Bonjour,

    Je suis d'un niveau on ne peut plus debutant en C++, et je cherche a transformer une string en un tableau de double. Dans cette string, mes valeurs sont separees par des virgules, je procede donc d'abord a un decoupage de la chaine en passant par istringstream, puis je converti chaque valeur en double grace a Boost::lexical_cast (j'ai vu dans la FAQ et dans les tutos qu'il faisait ca tres bien...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    istringstream DATA(DATALINE);     // DATALINE est la chaine dont je veux extraire mes valeurs
    		J=0;
    		while(getline(DATA, STRINGS, ','))			
    		{
    			if(J!=0)     // Ca, c'est parce que je ne veux pas de la premiere valeur qui est une date...
    			{
    				cout << DATALINE << endl; // Ca, c'est pour afficher ma chaine pour verifier son contenu pendant le debuggage
    				TABLE[J] = boost::lexical_cast<double>(STRINGS);			
    				cout << TABLE[J] << endl;// Ca, c'est pour afficher les valeurs extraites pour les verifier.
    				system("PAUSE");
    			}
    			J++;
    		}
    A l'affichage de DATALINE (ma chaine), j'obtiens bien ce qui a ete rentre dedans, c'est a dire : "01/10/1977,128578.08,16201.08,23893.8,128578.08,0"
    Par contre, a l'affichage des doubles qui sont extraits, j'obtiens des valeurs arrondies :
    128578
    16201.1
    23893.8
    128578
    0

    De plus, les arrondis semblent incoherents entre eux (128578.08 est arrondi a 128578 alors que 16201.08 est arrondi a 16201.1), donc je ne comprend vraiment pas d'ou ca vient...

    Edit : J'ai oublie de preciser : je travaille avec Visual Studio 2005 (sous Windows XP).

    Si quelqu'un a une explication, voire une solution, je suis preneur.

    Merci

    PS : Je precise que je me trouve en ce moment a un decalage horaire de 10 heures de la France, donc je risque fort de ne pas repondre dans la journee... celle-ci etant la nuit pour moi ^^, (je precise a l'avance, on ne sait jamais... )

  2. #2
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Je me permet de faire un petit up, car je ne trouve toujours pas de solution... J'ai tente de decouper ma string d'une autre facon en utilisant Boost... le resultat est le meme.

    J'ai egalement tente de faire directement la conversion sur la chaine de caracteres (par exemple boost::lexical_cast<double>("128578.08 "), il me fait exactement les memes arrondis...).

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Amariel
    Si quelqu'un a une explication,
    Ca n'a rien a voir avec boost. L'affichage des flottants se fait par defaut avec 6 chiffres significatifs.

    voire une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <iomanip>
    ...
    cout << setprecision(15) << TABLE[J] << endl;

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    En effet, c'etait donc juste un probleme de precision de l'affichage. Quelquepart ca me soulage franchement... 'cest la qu'on voit que j'ai encore beaucoup a apprendre du C++...

    Merci encore

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

Discussions similaires

  1. Valeurs arrondies non voulues
    Par Defcon08 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/04/2014, 22h13
  2. arrondis non voulu fait par l'ordinateur
    Par Fredo123456 dans le forum C
    Réponses: 9
    Dernier message: 29/11/2007, 18h22
  3. Réponses: 1
    Dernier message: 27/08/2007, 14h07
  4. [BOOST] utilisation de boost uBLAS non compile avec visual c++
    Par le_voisin dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 06/09/2006, 22h03
  5. Arrondie non voulu
    Par Toff !!!!! dans le forum Access
    Réponses: 5
    Dernier message: 27/09/2005, 10h13

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