String in Float konvertieren



  • Hi
    Ich hab grad ein Programm mit dem ich Einträge aus einer Ini-Datei lesen will. Da ich das nur mit int oder string kann aber ich float einträge lesen will. Muss ich string in float konvertieren hab aber keine Ahnung wie das geht.
    Gruß durchschnittsuser



  • durchschnittsuser schrieb:

    Ich hab grad ein Programm mit dem ich Einträge aus einer Ini-Datei lesen will. Da ich das nur mit int oder string kann aber ich float einträge lesen will. Muss ich string in float konvertieren hab aber keine Ahnung wie das geht.

    Verwende atof().



  • oder so:

    erstmal das ich dich richtig verstehe, du willst den string "1234.23" in float umwandeln?
    
    wenn dann nich so?
    [cpp]
    #include <sstream> //für stringstream
    
    stringstream sstr;
     string str = "1234.23";
     float f;
     sstr<<str;
     sstr>>f;
    


  • Hallo

    ein Blick in die C++ FAQ hätte auch gereicht:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html

    bis bald
    akari



  • audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.



  • Vielen Dank! Es tut. 👍



  • Artchi schrieb:

    audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.

    Aber herrlich unkompliziert im Vergleich zu Stringstreams.



  • audacia schrieb:

    Artchi schrieb:

    audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.

    Aber herrlich unkompliziert im Vergleich zu Stringstreams.

    und nicht mal ansatzweise so sicher



  • audacia schrieb:

    Artchi schrieb:

    audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.

    Aber herrlich unkompliziert im Vergleich zu Stringstreams.

    Wenn stringstream für dich kompliziert sind, dann solltest du das Programmieren aufgeben und dich einer anderen Tätigkeit widmen.



  • Artchi schrieb:

    audacia schrieb:

    Artchi schrieb:

    audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.

    Aber herrlich unkompliziert im Vergleich zu Stringstreams.

    Wenn stringstream für dich kompliziert sind, dann solltest du das Programmieren aufgeben und dich einer anderen Tätigkeit widmen.

    oder zumindest noch bissl üben...


  • Mod

    es spricht ja nichts dagegen, stringstreams mit einer funktion analog zu atof() zu verbinden. in vielen fällen ist atof() expressiver, denn stringstreams sind in diesem falle implementationsartefakte, die im kontext der anwendung völlig irrelevant sind.
    am besten nutzt man dann nat. etwas fertiges: boost::lexical_cast ...



  • Artchi schrieb:

    audacia schrieb:

    Artchi schrieb:

    audacia schrieb:

    Verwende atof().

    Das ist C und nicht C++.

    Aber herrlich unkompliziert im Vergleich zu Stringstreams.

    Wenn stringstream für dich kompliziert sind, dann solltest du das Programmieren aufgeben und dich einer anderen Tätigkeit widmen.

    Genau die richtige Einstellung 😉
    wenn ich etwas kompliziert finde, am besten gleich aufhören 🙄 Hätte ich "zu kompliziert" geschrieben, OK...
    Meine Anforderungen an eine Funktion, die einen String in eine Gleitkommazahl wandelt, sind, daß sie keine Exception wirft, schnell arbeitet und unkompliziert zu verwenden ist. Bei atof sieht man außerdem problemlos, was gemacht wird; das ist, was ich an den Stringstreams so unnötig kompliziert finde.

    Moritz



  • 🙂



  • stringstreams sind aber sicherer, da sie im gegensatz zu atof keine 0.0 im fehlerfall zurückgeben(sowas gibt nämlich perfekte hard to find bugs, da zb in dateien auch die 0.0 vorkommen kann..)



  • audacia schrieb:

    Meine Anforderungen an eine Funktion, die einen String in eine Gleitkommazahl wandelt, sind, daß sie keine Exception wirft, schnell arbeitet und unkompliziert zu verwenden ist. Bei atof sieht man außerdem problemlos, was gemacht wird; das ist, was ich an den Stringstreams so unnötig kompliziert finde.

    Aha? Und wenn es einen Fehler gibt? Wie willst du den dann feststellen? 🙄 Eben gerade wegen der Exceptions sollte man den stringstream benutzen!!! Oder meinste, die wurden aus Jux und Dollerei bei zu viel Bier konzipiert? Und alles war nur in Wirklichkeit ein Joke? "Leute, wir haben uns mit den Exceptions nur nen Gag erlaubt! Kommt nicht wieder vor. Die ISO-Spezifikation wird das nächste Mal mehr Ernsthaftigkeit beinhalten."



  • @Artchi:
    Wieso biste denn so gereizt?



  • Artchi schrieb:

    Aha? Und wenn es einen Fehler gibt? Wie willst du den dann feststellen? 🙄 Eben gerade wegen der Exceptions sollte man den stringstream benutzen!!! Oder meinste, die wurden aus Jux und Dollerei bei zu viel Bier konzipiert? Und alles war nur in Wirklichkeit ein Joke? "Leute, wir haben uns mit den Exceptions nur nen Gag erlaubt! Kommt nicht wieder vor. Die ISO-Spezifikation wird das nächste Mal mehr Ernsthaftigkeit beinhalten."

    LOL 😃
    Als ob es verboten wäre, die C-Standardbibliothek zu benutzen...
    Das tut mir schrecklich leid, wenn ich nicht alle Möglichkeiten, die C++ bietet, voll ausschöpfe, aber mir ist es lieber, wenn ich im Fehlerfall 0 zurückbekomme und bei Bedarf überprüfen kann, ob der String eine gültige Gleitkommazahl war, anstatt jedesmal eine Exception reingeknallt zu kriegen. Wenn du dich von mir persönlich verletzt fühlst: das wollte ich nicht. Tut mir leid. 😉

    CarstenJ schrieb:

    @Artchi:
    Wieso biste denn so gereizt?

    Wüßte ich auch mal gerne.

    Moritz



  • ...anstatt jedesmal eine Exception reingeknallt zu kriegen.

    ich liebe exceptions. da weis man immer genau woran man ist. das ist toll 🙂 man kann nie falsche oder undefineirte werte benutzen wenn ne exception fliegt. 👍

    //edit

    eingabe: 2,5/3.0

    ausgabe:0

    ahja..

    oder nochbesser:

    eingabe: 2.5/3,0

    ausgabe: eine exception flog an punkt blalbla grund: division durch null. 😃



  • Was man beachten sollte: Auch die C-Runtimes verwenden zu meiner Überraschung Sprach-
    Einstellungen. Das führte bei einem Programm von mir zu Problemen ohne Ende. Bin mir
    auch nicht ganz sicher, ob die Default-Einstellung die System-Einstellung oder Englisch
    (USA) ist.



  • die clib benutzt die alten clokals. standardeinstellung müsste eigentlich bs spezifisch sein.


Anmelden zum Antworten