Float in CString und CString in Float



  • Weiss jemand wie ich das in die beiden Richtungen konvertieren kann? Am besten mit _fcvt (aber das funzt bei mir nicht)



  • Float nach CString:

    CString tmp;
    float f = 10.5f;
    tmp.Format("%.1f", f); // Je nach Genauigkeit noch anpassen; wie in C mit printf
    

    Von CString nach float ganz einfach mit C-Funktionen:

    CString tmp = "10.5";
    float f = (float)(atof(f));
    

    Ansonsten guck mal in die FAQ nach:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-285350.html
    Von einem std::string zu einem CString kannst du anschließend wie folgt kopieren:

    std::string str = "Text";
    CString cStr = str.c_str()
    


  • CString tmp = "10.5";
    float f = (float)(atof(f));

    versteh ich nicht... hier wird doch gar nicht tmp mit einbezogen.



  • Ein bischen Mitdenken würde es aber auch tun. 😉
    An atof muss natürlich tmp übergeben werden:

    CString tmp = "10.5";
    float f = static_cast<float>(atof(tmp));
    

    CString hat operator() überladen für die Konvertierung in einen char-Pointer, daher sollte das ohne Probleme aufzurufen sein.



  • na das war mir schon klar -> aber auf dem pocket PC gibts hier n anderes problem. da kann man nicht einfach ein WideChar als Multibyte als Parameter übergeben. Das muss erst konvertiert werden... gibts ne einfachere lösung?

    s1 = L"1.34";
    
            float x;
            char *s;
    	int len = wcslen(s1);
    
    	s = new char[len+1];  // länge s+1
    
    	WideCharToMultiByte(CP_ACP,
    						WC_DEFAULTCHAR,
    						s1,
    						-1,
    						s,
    						len,
    						NULL,
    						NULL);
    
    	s[len]=0;
    
    	x = (float)atof(s);
    

    Wieso kommt als x immer nur 0.00 raus? Was mach ich falsch?


Anmelden zum Antworten