double in string umwandeln, in Hilfe finden



  • pospiech schrieb:

    Die Hilfe von VS ha mir überhaupt nicht weitergeholfen. Daher meine erste Frage: wie findet man derartiges in der Hilfe?

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-133348.html
    Du arbeitest mit CEdit und CString, also such am besten danach. 🙂

    Dann möchte ich dstrValue beliebig verändern und danch wieder ausgeben. Dazu konnte ich aber nicht herausfinden wie man double wieder in CString umwandelt.
    [/cpp]Schau in die Faq oder probier gleich mal das aus, was ich dir oben verlinkt habe. Sollte das selbe Ergebnis haben.[cpp]
    Und wie stelle ich sicher das CstrText aus Edit1 wirklich nur Zahlen und keine Buchstaben enthält?

    Matthias

    Guck mal in die Eigenschaften des Edit. Ist ganz einfach. 🙂



  • Tester2 schrieb:

    Guck mal nach:

    char *_fcvt( 
       double value,
       int count,
       int *dec,
       int *sign 
    );
    

    In der hilfe dazu stand, dass man besser _fcvt_s benutzen sollte. Habe ich jetzt implementiert:

    double dstrValue = _tcstod(CstrText,NULL); 	
    	// CstrText = atof(dstrValue); 	
    	// m_wndEdit2Control.SetWindowText (CstrText);
    
    	// Konvertierung von double nach CString
    	char * buffer = 0;
    	int decimal; //Pointer to the stored decimal-point position.
    	int sign; //Pointer to the stored sign indicator. 
    	int err; 
    
    	buffer = (char*) malloc(_CVTBUFSIZE); 
    	err = _fcvt_s(buffer, _CVTBUFSIZE, dstrValue, 5, &decimal, &sign);
    

    Das macht mir allerdings aus "12" erst ein "12.00000" und daraus wieder den String "1200000" - ich hätte aber gerne ein menschenlesbares "12" mit korrekt eingefügter Kommastelle.

    Kann ja nicht sein, dass noch nie jemand dieses Problem hatte.

    estartu schrieb:

    Guck mal in die Eigenschaften des Edit. Ist ganz einfach. 🙂

    Ja - aber dann kann ich kein Komma und kein Punkt mehr eingeben. Da ich nicht nur ganzahlige Zahlen benötige hilft mir das somit nicht weiter.

    Matthias



  • pospiech schrieb:

    [...] wie findet man derartiges in der Hilfe? [...]

    Indem Du in der MSDN suchst ?!
    ➡ http://msdn.microsoft.com/library/

    pospiech schrieb:

    // ...
    CstrText = atof(dstrValue);     // funktioniert nicht!
    // ...
    

    Funktioniert nicht, ist immer noch keine Fehlermeldung!- 😞
    Wenn atof hier die Standard-C-Funktion ist (siehe Hier), dann kannst das doch
    auch nicht funktionieren. Der Return-Wert passt doch gar nicht.

    pospiech schrieb:

    Ja - aber dann kann ich kein Komma und kein Punkt mehr eingeben. Da ich nicht nur ganzahlige Zahlen benötige hilft mir das somit nicht weiter.

    Denke mal das musst Du vollständig selbst implementieren.

    Mal eine allgemeine Frage:
    Wenn MFC doch mit C++ 'arbeitet' (wenn auch etwas amateurhaft), warum verwenden dann alle hier C-Funktionen. Man könnte das hier (mal abgesehen vom locale-Problem) doch auch mit std::stringstream's und std::setprecision lösen 😕 ... 💡 ... 😉 .



  • CodeFinder schrieb:

    pospiech schrieb:

    [...] wie findet man derartiges in der Hilfe? [...]

    Indem Du in der MSDN suchst ?!
    ➡ http://msdn.microsoft.com/library/

    Ich habe bislang nur mit VB6 und dessen IDE gearbeitet. Dort reicht ein F1 auf dem betreffenden Element, Code oder Ressource, und man hat was man sucht. Bei VS2005C++ funktioniert genau das überhaupt nicht. Und MSDN bringt mir meist 100 Ergebnisse von denen sich die meisten überhaupt nicht auf C++ beziehen - daher meine Frage.

    CodeFinder schrieb:

    Mal eine allgemeine Frage:
    Wenn MFC doch mit C++ 'arbeitet' (wenn auch etwas amateurhaft), warum verwenden dann alle hier C-Funktionen. Man könnte das hier (mal abgesehen vom locale-Problem) doch auch mit std::stringstream's und std::setprecision lösen 😕 ... 💡 ... 😉 .

    Ich versuche mich gerade in C++/MFC einzuarbeiten. Wenn ich etwas nicht in C++ sondern in C implementiere, dann weil ich es nicht besser weiß und keine entsprechenden Beispiele habe.

    Matthias



  • zu 1:
    Das gibt es für die Express Edition auch, Siehe:
    ➡ http://www.microsoft.com/downloads/details.aspx?FamilyId=373930CB-A3D7-4EA5-B421-DD6818DC7C41&displaylang=en
    Allerdings kann ich die wegen einem Installationsfehler (Eine Datei ist angeblich nicht vorhanden) nicht installieren.

    zu 2:
    Achso, dann sorry! Also dann empfehle ich Dir hier mal std::stringstream 😉 .
    Gehört auch zur Standard-Template-Library von C++...

    Hier ein Info-Link:
    ➡ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrf_sstream_stringstream.asp



  • CodeFinder schrieb:

    zu 1:
    Das gibt es für die Express Edition auch, Siehe:
    ➡ http://www.microsoft.com/downloads/details.aspx?FamilyId=373930CB-A3D7-4EA5-B421-DD6818DC7C41&displaylang=en
    Allerdings kann ich die wegen einem Installationsfehler (Eine Datei ist angeblich nicht vorhanden) nicht installieren.

    Ich benutze VS2005 Prof. mit Lizenz und CDs von der Uni. Da ist MSDN dabei, oder was meinst du ?

    CodeFinder schrieb:

    Achso, dann sorry! Also dann empfehle ich Dir hier mal std::stringstream 😉 .
    Gehört auch zur Standard-Template-Library von C++...

    Mir fehlt leider das entscheidende Beispiel. Ich habe zwar das Buch "Accelerated C++" wo auch bei cin, cout mit streams und setprecision gearbeitet wird - ich sehe aber nicht wie ich das wiederum auf eine Cstring anwenden könnte/sollte.

    Matthias



  • CodeFinder schrieb:

    Wenn MFC doch mit C++ 'arbeitet' (wenn auch etwas amateurhaft), warum verwenden dann alle hier C-Funktionen. Man könnte das hier (mal abgesehen vom locale-Problem) doch auch mit std::stringstream's und std::setprecision lösen 😕 ...

    Ich bin dafür!

    Nur fehlt mir noch immer ein Beispiel wie ich eine Zahl, z.B. als double mit Angabe von setprecision und der Nutzung von streams aus STL an einen CString übergebe, so dass ich das Ergebnis wieder an ein CStatic Element übergeben kann (via SetWindowText)

    Bislang ist mir nur klar wie ich mit unschönen C Methoden das ganze zurechtbastle.

    Matthias



  • Also ich mache das immer so:

    _gcvt(dDouble, nDigits, chBuffer);
    szString = chBuffer;
    


  • Auf der Seite http://msdn2.microsoft.com/en-us/library/0heszx3w(VS.80).aspx
    habe ich eine ganze Liste von kryptischen Funktionen zum Konvertieren gefunden.

    Aber ehrlich gesagt würde ich viel lieber solche nehmen, die 1) zu empfehlen sind 2) weniger kryptisch sind.

    Abgesehen davon fehlt in dieser Liste einiges, z.B. ein IntToCstrin was ich ebenfalls suche.

    Matthias



  • Zuletzt habe ich mich an CString::Format probiert:

    CString buffer;
    	buffer.Format(_T("%i"),i);
    	m_WndStaticIterations.SetWindowTextW(buffer);
    

    und das funktioniert. Das schöne daran ist, dass ich die Genaugigkeit und beliebige Datentypen angeben kann. Das unschöne, dass es C statt C++ Code ist.

    Matthias


Anmelden zum Antworten