# ASCII to float



## janosch (5. April 2003)

HI!

Ich soll ein kleines Programm schreiben das mir die ASCII werte in float umrechnet.Also genau das was die Funktion atoi(oder war's atof)macht nur das wir diese Funktion selbst schreiben sollen.Wie ich das mache ist mir schon klar aber wie rechnet man ASCII werte in float um (formel)?

mfg janosch


----------



## Deunan (7. April 2003)

*Hier die Funktion:*

Zunächst muss atof selbst seinen Resultat Typ deklarieren, da dieser nicht int ist. Weil nun float in Ausdrücken in double umgewandelt wird, lohnt es sich nicht, anzugeben, dass atof float liefert; man kann genauso die zusätzliche Genauigkeit ausnützen und deklarieren daher atof als double. Der Datentyp Name steht vor dem Funktionsnamen, wie folgt:

```
double atof(s) // Zeichenkette s nach double umwandeln
char s[];
{
     double val, power;
     int i, sign;

     for(i=0; s[i]==' '|| s[i]=='\n' || s[i]=='\t'; i++)
          ; //Zwischenraum übergehen
     sign = 1;
     if(s[i]=='+' || s[i] == '-') //Vorzeichen
          sign=(s[i++] == '+') ? 1 : -1;
     for(val = 0; s[i] >= '0' && s[i] <= '9'; i++)
          val = 10 * val + s[i] - '0';
     if(s[i] == '.')
          i++;
     for(power = 1; s[i] >= '0' && s[i] <= '9'; i++) {
          val = 10 * val + s[i] - '0';
          power *= 10;
     }
     return(sign * val / power);
}
```
So das müsste es gewesen sein!
(Ich hoff ich hab mich nicht verschrieben)
Viel dazu erklären kann ich leider nicht.
atof verarbeitet optional Vorzeichen und Dezimalpunkt und wird auch mit fehlenden ganzzahligen Teilen oder Bruch fertig.
Ist aber keine Eingabeumwandlungsroutine von hoher Qualität.

Bis denn!

Deunan


----------

