Wie kann ich String in C ++ in Double konvertieren?
Wie kann ich konvertieren von string zu double in C++?
Ich möchte eine Funktion gibt 0 zurück, wenn die Zeichenfolge ist nicht numerisch.
InformationsquelleAutor der Frage | 2008-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe C++ - FAQ-Lite Wie konvertiere ich eine std::string zu einer Zahl?Siehe C++ - Super-FAQ Wie konvertiere ich eine std::string zu einer Zahl?
Bitte beachten Sie, dass mit Ihren Anforderungen können Sie nicht unterscheiden, alle die die erlaubte string-Repräsentationen von null aus der nicht-numerischen strings.
InformationsquelleAutor der Antwort Alessandro Jacopson
Einfachste Weg ist die Verwendung boost::lexical_cast:
InformationsquelleAutor der Antwort Lazin
atof und strtod tun, was Sie wollen, aber die sind sehr fehlerverzeihend. Wenn Sie nicht wollen, zu akzeptieren Zeichenfolgen wie "32asd" als gültig, Sie müssen wrap strtod in einer Funktion wie dieser:
InformationsquelleAutor der Antwort jmucchiello
Wenn es ein c-string (null-terminiertes array von Typ char), die Sie tun können, so etwas wie:
Wenn es ein C++ - string, nur mit der c_str () - Methode:
atof() konvertiert den string in eine double -, Rückgabe 0 bei Fehler. Die Funktion ist hier dokumentiert: http://www.cplusplus.com/reference/clibrary/cstdlib/atof.html
InformationsquelleAutor der Antwort Colin
Ausgabe:
99.999
(das ist doppelt, Leerzeichen wurde automatisch entfernt)Seit C++11-converting-string floating-point-Werte (wie double) ist verfügbar Funktionen:
stof - konvertieren von str in einen float
stod - convert str zu einem Doppelbett
stold - convert str zu einem long double -
Hinzuzufügen, können Sie versuchen, catch-Anweisung, wenn
stod
wirft eine Ausnahme.InformationsquelleAutor der Antwort Bad
Muss sagen, ich Stimme mit, dass die eleganteste Lösung ist die Verwendung von boost::lexical_cast. Dann können Sie fangen die bad_lexical_cast, die möglicherweise auftreten, und etwas zu tun, wenn es scheitert, anstatt 0.0 die atof gibt.
InformationsquelleAutor der Antwort martiert
Einer der elegantesten Lösung für dieses problem ist die Verwendung von boost::lexical_cast wie @Evgeny Lazin erwähnt.
InformationsquelleAutor der Antwort hyperboreean
Ich denke atof ist genau das, was Sie wollen. Diese Funktion parst eine Zeichenkette und wandelt diese in ein double. Wenn der string nicht mit einer Zahl beginnen (nicht-numerische) a 0.0 zurückgegeben.
Aber, es versuchen zu analysieren, wie viel von der Schnur wie Sie können. In anderen Worten, die Zeichenfolge "3abc" würde interpretiert werden als 3.0. Wenn Sie möchten, eine Funktion, die den return 0.0 in diesen Fällen müssen Sie schreiben Sie eine kleine wrapper selbst.
Auch diese Funktion arbeitet mit dem C-Stil-string ein null-terminiertes array von Zeichen. Wenn Sie eine string-Objekt, es muss konvertiert werden, um einen char* bevor Sie diese Funktion verwenden.
InformationsquelleAutor der Antwort Kyle Cronin
Es ist nicht eine einzelne Funktion, die das machen werden, da 0 eine gültige Zahl, und Sie müssen in der Lage sein zu fangen, wenn der string keine gültige Zahl.
Müssen Sie die Zeichenfolge zunächst (wohl mit einem regulären Ausdruck), um zu sehen, ob es enthält nur zahlen und numerische Satzzeichen. Sie können dann entscheiden, geben 0 zurück, wenn das ist, was Ihre Anwendung benötigt werden, oder wandeln Sie es in ein double.
Nach oben schauen atof() und strtod() sollte ich formuliere meine Aussage "es sollte nicht sein" statt "es ist nicht" ... hehe
InformationsquelleAutor der Antwort Ron Savage