Frage zu atof



  • Hallo!

    Mitunter sind die Zahlen, die ich aus einer Datei einlese nicht korrekt formatiert.

    Z.B. "7.85-9" statt "7.85e-9"

    Wenn ich diese Zahl mit atof oder strtod wandle, wird das "-9" unterschlagen.

    Gibt es eine einfache Möglichkeit den Wert korrekt zurückzubekommen?

    Ciao

    OkkaPapa



  • Prinzipiell bin ich ein großer Fan von Garbage-in-Garbage out. Das hieße es an der Quelle zu reparieren, oder mit einem Shellscript o.ä. eine Korrektur vorzunehmen.

    Aber was ist denn mit einem einfachen Hack:

    double myatof(const char* str){
      char *c;
      double ret = strtod(str, &c);
      if(*c=='\0')
        return ret;
      double exp=strtod(c, NULL);
      return ret * pow(10, exp);
    }
    


  • Furble Wurble schrieb:

    Prinzipiell bin ich ein großer Fan von Garbage-in-Garbage out. Das hieße es an der Quelle zu reparieren, oder mit einem Shellscript o.ä. eine Korrektur vorzunehmen.

    Ja, ich eigentlich auch!
    Da aber das Programm, daß damit eigentlich gefüttert wird, dieses Format zulässt, muß ich beide Formate korrekt lesen können.
    Die Quelle selbst per Shellskript o.ä. zu korrigieren würde heißen, daß ich den Datensatz verändere (auch wenns nur ein umformatieren ist).
    Das mögen die Anwender leider gar nicht...

    Danke für den schnellen Hack!

    Klappt 1a!

    Ciao

    OkkaPapa


  • Mod

    OkkaPapa schrieb:

    Ja, ich eigentlich auch!
    Da aber das Programm, daß damit eigentlich gefüttert wird, dieses Format zulässt, muß ich beide Formate korrekt lesen können.
    Die Quelle selbst per Shellskript o.ä. zu korrigieren würde heißen, daß ich den Datensatz verändere (auch wenns nur ein umformatieren ist).
    Das mögen die Anwender leider gar nicht...

    Filter vor dein Programm setzen. Solche Dinge zu korrigieren, gehoert echt nicht in dein Programm. Denn wenn du das in deinem Programm machst, erreichst du 2 Dinge:
    1. Dein Programm funktioniert nicht mehr richtig mit normalen Eingaben.
    2. Du musst das fuer jedes weitere Programm genau so machen, anstatt einmal den passenden Filter zu schreiben.


Anmelden zum Antworten