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

wxWidgets Discussion :

Convertir une wxString en float


Sujet :

wxWidgets

  1. #1
    Débutant
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Points : 704
    Points
    704
    Par défaut Convertir une wxString en float
    Bonjour,

    Je dois transformer du wxString en Float.

    J'ai vu qu'il y avait les méthodes ToLong, ToLongLong, ToDouble,... mais ce n'est pas en float...

    Merci de votre aide.
    Évènements dans le 06?
    www.sortir06.com

  2. #2
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut.

    Tu peux utiliser la méthode ToDouble, et faire un cast pour obtenir un float.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double dVal;
    MywxString.ToDouble(&dVal);
    float fVal=(float)dVal;
    @+
    Xav'

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Pour le cast, préfère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float fVal=static_cast<float>(dVal);
    Accessoirement, tu peux aussi utiliser les facilités de conversion offertes par boost :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boost::numeric_cast<float>(d);
    qui t'offrira un peu plus de service.

    Ou carrément boost::lexical_cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float f_val = boost::lexical_cast<float>(wx_ma_string.c_str());

  4. #4
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    @3DArchi : Peux-tu donner la différence entre le cast que j'ai indiqué et le static_cast STP ?

    Etant programmeur amateur autodidacte, c'est le genre de notion que j'ai du mal à saisir.

    Merci d'avance.

    @+
    Xav'

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Les nouveaux opérateurs de transtypage ont été introduits en C++ pour être permettre au développeur de bien maîtriser ses conversions. Et notamment, quand il fait quelque chose de pas très catholique, en avoir pleinement conscience. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
      int i;
      int *pi=&i;
      long *pl;
      pl = (long*)pi;// OK
      pl=static_cast<long*>(pi); // Erreur
     
    return 0;
    }
    Car il y a danger à convertir un int* vers un long *.

    Cependant, si tu veux vraiment le faire, c'est toujours possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pl=reinterpret_cast<long*>(pi); // OK
    Mais, si un autre développeur vient relire ton code derrière, en voyant cette ligne, il sait qu'on va commencer à faire des choses bizarres ...

    Ca vérifie aussi les problèmes de const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int main()
    {
      int i;
      const int *pci=&i;
      int *pi2;
    //  pi2 = pci;//Erreur
      pi2 = (int*)pci; // OK mais on ne sait pas qu'on a perdu le const !
    //  pi2=static_cast<int*>(pci); // Erreur
    //  pi2=reinterpret_cast<int*>(pci); // Erreur
      pi2=const_cast<int*>(pci);// OK mais on sait qu'on perd le const !
    return 0;
    }
    En résumé, cela renforce le typage et ses conversions.

    Accessoirement, si tu as besoin de retrouver toutes les fois dans ton code où tu as fait des conversions, il sera beaucoup plus facile de faire une recherche sur les mots clés (static_cast...) que de chercher tout les occurences '(type)'.

    Tu peux trouver quelques blabla dans la FAQ et dans un tuto.

  6. #6
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Merci.

    Vu sous cet angle, je comprend mieux.
    Et du coup, je pense également que c'est une bonne habitude à prendre que d'utiliser ces nouveaux opérateurs de transtypage, par sécurité.

    @+
    Xav'

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    C'est plus qu'une bonne habitude
    Le cast à la 'C' a été conservé par souci de compatibilité avec l'existant et avec le code C. Mais, il est clairement dit que la bonne façon de programmer est d'utiliser ces nouveaux opérateurs de transtypage. On a même l'impression que certain aurait préféré interdire les anciens 'C'-style cast...

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

Discussions similaires

  1. Convertir une chaine en float
    Par P.G dans le forum Débuter
    Réponses: 2
    Dernier message: 20/12/2013, 09h51
  2. Réponses: 3
    Dernier message: 13/02/2013, 16h24
  3. [C#] Comment convertir une String en float ?
    Par DestinyWar45 dans le forum C#
    Réponses: 7
    Dernier message: 08/10/2010, 04h19
  4. Convertir une image de type 'int16' vers 'float'
    Par cedji dans le forum Images
    Réponses: 6
    Dernier message: 07/07/2009, 16h06
  5. [XSLT]Convertir une chaîne en float, int etc ... avec XSL
    Par wozzz dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/05/2006, 10h12

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