String -> Float mit der Notation -5.0e-05
-
Hallo,
gibt es einen Befehl mit dem ich einen String, mit dem Format "-5.0e-05" UND "5.50" , in einen Float-Typ umwandeln kann? Also mit atof() und sscanf() komme ich da nicht weiter, müsste fallabhängig die Befehlsparameter ändern und ich würde mir gerne diesen Aufwand sparen.
Vielen Dank.
-
Wieso kommst du mit atof() nicht weiter? Das schluckt alle Eingaben, die als float-Zahl erkannt werden können (sowohl im "normalen" Format 5.50 als auch in wissenschaftlicher Notation -5e3).
-
Das dachte ich auch aber bei exakt dieser Zahl "-1,503906e-04" steigt atof() aus. Ich weiß nicht wieso.
-
Vermutlich weil C aus dem englischen Sprachraum stammt und deshalb Punkte als Dezimaltrenner verwendet
-
Das macht keinen Unterschied, da beides nicht geht.
-
Vielleicht solltest du mal etwas mehr verraten als "das geht nicht". Wie sieht dein Programm aus? Was für Werte gibst du ein und was kommt am anderen Ende heraus?
-
Ok, dann erkläre ich mal was ich vorhabe.
Ich habe eine TXT-Datei mit Messwerten und möchte (eher muss) die mit einer ANSI C- Routine parsen. Nun ist das Problem, dass mir die Datenquelle Fließkommazahlen in dem Format "5.10" und "5.10e-05" ausgibt. Die Notation "5.10" einzulesen ist kein Problem und auch die Notation "5.10e-05" kann ich einlesen. Aber eben nicht mit denselben Befehlen bzw. Parametern.
Mit atof() kann ich nur "5.10" einlesen. Mit sscanf() kann ich beides einlesen, muss aber in Abhängigkeit der Notation die Parameter ändern.
Ich versuche jetzt rauszufinden ob es EINEN Befehlen mit den GLEICHEN Parametern für beide Notationen gibt um den Mehraufwand an Schleifen einzusparen.Wähle ich den falschen Parameter erkennt er bei "1.5e-03" nur die "1.5", das 10^-3 lässt der Befehl atof unter den Tisch fallen.
-
pureMescaline schrieb:
Wähle ich den falschen Parameter erkennt er bei "1.5e-03" nur die "1.5", das 10^-3 lässt der Befehl atof unter den Tisch fallen.
Also das wäre mir neu.
Ansonsten: Warum überhaupt der Umweg über einen String? (vermutlich hast du dabei schon Teile der Eingabe abgeschnitten - zeig doch mal, WAS du genau versucht hast*) Du kannst auch fscanf() verwenden, um direkt aus der Textdatei in deine Variablen zu lesen.
* Ein code sagt mehr als Tausend Worte - und wenn du den Code zeigst, mit dem du einlesen wolltest, können wir dir auch bei der Fehlersuche helfen.
-
Ähm
dann frage ich mich, warum
int main(void) { char *value = "-1.503906e-04"; double d = atof(value); printf("%e\n", d); return 0; }
bei mir funktioniert.
-
*schäm* Habe einen blöden Fehler im Quellcode gefunden. Jetzt funktionierts bei mir auch.
Trotzdem, vielen Dank.
-
Und deswegen sollte man immer ein kleines Codebeispiel bei welchem der Fehler auftritt mitliefern. Denn meistens findet sich beim erstellen der Fehler von alleine.