String umwandeln in Float

Puepue

Komplett-PC-Aufrüster(in)
Hallo zusammen, ich mal wieder :)

Ich schreibe gerade an einem Programm, in dem eine Funktion sein soll: ich gebe "123.456" ein und bekomme das als float-wert zurück.
Habe mich jetzt mit atof() versucht, aber dann bekomme ich 123 zurück - scheinbar ist atof nicht das richtige dafür? Muss ich also den ganzen String manuell durchlaufen oder gibt es eine passendere Funktion?

Code:
int TString::toFloat(bool &error)
{
    float floatVal = 1.1;                    // Als Default-Wert
    char * tmpValFloat;
    tmpValFloat = new char [this->getTextlaenge()];    // Mehr Zeichen geht nicht
    int i = 0;

    // String so lange durchlaufen, wie Zahlenwerte im String stehen
    while (
            (    
                (int)this->pString[i] < 58 && (int)this->pString[i] > 47        // Ziffer
                || 
                (int)this->pString[i] == 45                                        // oder Minus-Zeichen
                || 
                (int)this->pString[i] == 44                                        // oder Komma
                || 
                (int)this->pString[i] == 46                                        // oder Punkt
            )
            && 
            i < this->getTextlaenge()                                            // Maximal so viele Ziffern, wie String lang ist (logisch)
    ) {
        if ((int)this->pString[i] == 44) {
            tmpValFloat[i] = '.';                                                // "Deutsches" Komma => Punkt
        } else {
            tmpValFloat[i] = (int)this->pString[i];
        }
        i++;
    }

    // Prüfe, ob String mit Minus oder Ziffer beginnt, darf aber nicht mit Komma/Punkt beginnen:
    if( 
        !((int)this->pString[0] < 58 && (int)this->pString[0] > 47)        // Ziffer
        && 
        (int)this->pString[0] != 45                                        // oder Minus-Zeichen
    ) {
        error = true;                                                    // .. ansonsten setze Fehler
    } else {
        floatVal = atof(tmpValFloat);
    }

    delete[] tmpValFloat;

    return floatVal;
}
 
Zurück