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.
Version imprimable
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.
Salut.
Tu peux utiliser la méthode ToDouble, et faire un cast pour obtenir un float.
@+Code:
1
2
3 double dVal; MywxString.ToDouble(&dVal); float fVal=(float)dVal;
Xav'
Bonjour,
Pour le cast, préfère :
Accessoirement, tu peux aussi utiliser les facilités de conversion offertes par boost :Code:
1
2 float fVal=static_cast<float>(dVal);
qui t'offrira un peu plus de service.Code:
1
2 boost::numeric_cast<float>(d);
Ou carrément boost::lexical_cast :
Code:
1
2 float f_val = boost::lexical_cast<float>(wx_ma_string.c_str());
@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'
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 :
Car il y a danger à convertir un int* vers un long *.Code:
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; }
Cependant, si tu veux vraiment le faire, c'est toujours possible :
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 :mrgreen: ...Code:
1
2 pl=reinterpret_cast<long*>(pi); // OK
Ca vérifie aussi les problèmes de const :
En résumé, cela renforce le typage et ses conversions.Code:
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; }
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.
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'
C'est plus qu'une bonne habitude :mrgreen:
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...