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 de nombre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut Conversion de nombre
    Bonjour,

    je cherche a faire exactement le meme type de conversion que celui ci dessous int -> string contenant des '0' et des '1'
    (Ce code est en grande partie extrait de la FAQ...)

    mais avec des float.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    string getInt(string Question)
    {
    	using namespace std;
    	unsigned long int IntegerRead;
    	unsigned long int ul_var;
    	ostringstream oss;
     
    	cout << Question;
    	cin >>IntegerRead;
     
    	cout <<"\nInt entered:"<<IntegerRead<<endl;
    	ul_var = htonl(IntegerRead);
    	std::bitset<32> b2( ul_var );
     	oss << b2;
    	return oss.str();
    }
    J'ai tente ceci mais ca ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string getFloat(string Question)
    {
    	float FloatRead;
    	unsigned long int ul_var;
    	std::ostringstream oss;
    	cout << Question;
     
    	cin >> FloatRead;
    	cout << "\nFloat read ():"<<FloatRead<<endl;
    	std::bitset<32> b2( FloatRead );
     	oss << FloatRead;
    	return oss.str();
    }
    La methode me retourne seulement la partie entiere de l'element entré....

    Quelqu'un a t il une idee?

    Cdt

    rikau2

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    cin >> (float)FloatRead
    Pourquoi diable transtyper un float en float ?

    std::bitset<32> b2( FloatRead );
    Là effectivement ça ne prendra que la partie entière. Les bitsets ne gèrent que les entiers.

    oss << FloatRead;
    Là par contre ça devrait bien afficher le flottant extrait. Tu n'aurais pas un problème de séparateur par hasard (genre une virgule au lieu d'un point) ?

  3. #3
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Citation Envoyé par Laurent Gomila
    Citation:
    cin >> (float)FloatRead
    Pourquoi diable transtyper un float en float ?
    Par desespoir.... lol ; non c'etait pour tester.

    Citation Envoyé par Laurent Gomila
    Citation:
    std::bitset<32> b2( FloatRead );
    Là effectivement ça ne prendra que la partie entière. Les bitsets ne gèrent que les entiers.
    Je ne savais pas, merci sur ce point.

    Citation Envoyé par Laurent Gomila
    Citation:
    oss << FloatRead;
    Là par contre ça devrait bien afficher le flottant extrait. Tu n'aurais pas un problème de séparateur par hasard (genre une virgule au lieu d'un point) ?
    Pour le séparateur je saisie un '.' et en execution debug ca me prend bien mon chiffre.

    Maintenant le problème est toujours la, je n'arrive pas a faire à l'identique que pour l'integer, comment faire...

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Pourquoi faire compliqué? La faq est trés claire et propose une solution extrêmement simple.

    Tiens, je l'ai utilisé récemment, j'ai encore un bout de code qui traîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    #include <sstream>  
     
    template<typename T>
    std::string to_string( const T & Value )
    {
        std::ostringstream oss;
        oss << Value;
        return oss.str();
    }
     
    int main(int argc, char *argv[])
    {
    	float f;
    	std::cin >> f;
    	std::cout << to_string(f) << std::endl;
    	std::cin.sync();
     
    	std::cin.get();
    	return 0;
    }
    Ici c'est un exemple avec un flottant, mais ça marchera pour tous les types.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça donne une "string contenant des '0' et des '1'", ce code ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Citation Envoyé par r0d
    Pourquoi faire compliqué?
    ...
    Ici c'est un exemple avec un flottant, mais ça marchera pour tous les types.
    Comprends tu reelement ce que je cherche a faire??

    Je ne cherche pas a imprimer un nombre flotant directement... pas besoin de FAQ pour ca,

    Je cherche a transformer ce nombre de type float, qui a une representation memoire du type (00010101000101010001010100010101) afin de voir ces bits justement.... donc que dans ma string je dispose de caracteres 0 et 1 qui ont des codes ASCII 48 et 49 respectivement.

    Je cherche donc a faire la chose suivante:

    cout << ConvertFromFloatToString(12.43)<<endl;

    et afficher la representation sur 32 bits (simple precision)
    avec les elements suivants dedans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <------------32 bits---------------->
    +-+--------+-----------------------+
    |S|___E___|_________F___________|
    +-+--------+-----------------------+
    |1|<-_8_->|<----------23--------->|
    S: signe (0 ou 1 (+ ou - respectivement)
    E: exposant en base 2
    F: partie fractionnelle de la mantisse en base 2

    Est ce que mon explication est plus clair?

    Cdt

    rikau2

  7. #7
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Une petite question qui s'ajoute a la precedente:

    En fonction de l'architecture de ma machine, ma representation differera?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui, cela dépend des specs de la machine, voire de celles de ton run-time.
    Par contre, s'il est documenté que tes floats sont à la norme IEEE 754 simple précision, la représentation sera constante.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. Fonction de conversion de nombre réel en text
    Par hakim81 dans le forum Delphi
    Réponses: 2
    Dernier message: 05/02/2007, 14h55
  3. conversion dun nombre en chaine de caractère?
    Par franco82 dans le forum C++
    Réponses: 8
    Dernier message: 30/11/2006, 19h05
  4. [ASA]Conversion de nombres decimaux en toute lettre
    Par Fab_57 dans le forum Sybase
    Réponses: 1
    Dernier message: 22/08/2006, 14h49
  5. Conversion de nombres
    Par moonia dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2006, 11h09

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