Casten - CString in double



  • Hallo, ich habe einen CString, dessen Inhalt ich in einen double-Wert konvertieren möchte. Das kann die Funktion atof(..). Die liefert aber 0.0 zurück, wenn der String nicht konvertiert werden konnte, naja, aber eben auch 0.0, wenn im String "0.0" steht.

    Gibt es da eine andere Möglichkeit, bei der ich diese beiden Fälle unterscheiden kann?

    Gruß mathi



  • atof ist in float. nimm atoi



  • lol 😃
    Dann hat er seinen double als int 😃



  • Also, laut MSDN ist der return-Wert von atof double. Aber float wäre auch kein problem.

    Aber welche Möglichkeiten habe ich die beiden besagten Fälle zu unterscheiden?



  • Hallo mathi !

    Dein Problem ist ein bischen verzwickt, da Du eine Unterscheidung zwischen Zahleneingabe und nur Texteingabe haben willst. Ich habe mal ein bischen in der MSDN Library rumgeblättert und eine Funktion namens strtod() gefunden und dazu eine kleine Routine geschrieben die Dein Problem lösen könnte.

    char*   Rest;                               // Zeiger für den Rest des CStrings
        CString Text = "12.34Und hier ist Ende";    // der zu bearbeitende Text
    
        DOUBLE Wert = strtod(Text,&Rest);           // Zerlegung des CStings in Zahl und Resttext
        if (Text == Rest) MessageBox("Es konnte keine Zahl entnommen werden","Meldung",MB_OK);  // Meldung wenn nur Text vorhanden
    

    Die Funktion splittet den CString in zwei Teile, einmal in den Double-Wert (hier 12.34) in der Variable Wert und in den Rest des Textes (in diesem Fall "Und hier ist Ende"). Sollte also nur eine Texteingabe erfolgen, so ist der Inhalt von der Variablen Text und der Variablen Rest der gleiche da keine Zahl in dem CString vorhanden war.

    Gruß MacReeg



  • He, He, ...
    Das funktioniert ja Super!

    Danke und Gruß mathi



  • Ich denke, das ist FAQ-würdig 🙂


Anmelden zum Antworten