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?

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;
}


