Wie konvertiert man Float in String in C++
- Verwenden Sie Makroausdruck, um einen Fließkommazahl in eine Zeichenkette in C++ zu konvertieren
-
Verwenden Sie die Methode
std::to_string()
, um eine Fließkomma-Konstante in eine Zeichenkette in C++ zu konvertieren -
Verwenden Sie die Klasse
std::stringstream
und die Methodestr()
, um eine Fließkommazahl in eine Zeichenkette in C++ zu konvertieren
Dieser Artikel stellt mehrere Methoden zur Konvertierung eines Fließkomma-Zahlen in eine Zeichenkette in C++ vor.
Verwenden Sie Makroausdruck, um einen Fließkommazahl in eine Zeichenkette in C++ zu konvertieren
Präprozessor-Makros können verwendet werden, um eine konstante Fließkommazahl in einen Zeichenkettenwert umzuwandeln. Dabei ist zu beachten, dass diese Lösung nur für die Konvertierung von literaler Fließkommazahl gilt. Das folgende Code-Beispiel zeigt, wie die string
-Variablenkonstruktor-Anweisung mit dem Zeichenkettenmakro aufgerufen wird. Das Makro STRING
verwendet den Operator #
, um übergebene Argumente in eine Zeichenkettenkonstante zu konvertieren.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) #num
int main() {
string num_str(STRING(123.456));
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
Ausgabe:
123.456
Falls die Fließkomma-Konstante als ein anderer Makroausdruck definiert ist, sollte der obige Code durch ein zweistufiges Makro ersetzt werden, um korrekte Ergebnisse zu erhalten, wie im nächsten Codesegment gezeigt:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) STR(num)
#define STR(num) #num
#define NUMBER 123.456
int main() {
string num_str(STRING(NUMBER));
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
Ausgabe:
123.456
Verwenden Sie die Methode std::to_string()
, um eine Fließkomma-Konstante in eine Zeichenkette in C++ zu konvertieren
Die Funktion to_string
ist im <string>
Header definiert und kann verschiedene numerische Typen in einen string
Wert konvertieren. Die Methode nimmt einen numerischen Wert als Parameter und gibt den Wert std::string
zurück. Beachten Sie, dass to_string
unerwartete Ergebnisse zurückgeben kann, da die Anzahl der signifikanten Stellen in der zurückgegebenen Zeichenkette Null sein kann, wie im Beispielcode gezeigt wird:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
float n1 = 123.456;
double n2 = 0.456;
double n3 = 1e-40;
string num_str1(std::to_string(n1));
string num_str2(std::to_string(n2));
string num_str3(std::to_string(n3));
num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
num_str2.empty() ? cout << "empty\n" : cout << num_str2 << endl;
num_str3.empty() ? cout << "empty\n" : cout << num_str3 << endl;
return EXIT_SUCCESS;
}
Ausgabe:
123.456001
0.456000
0.000000
Verwenden Sie die Klasse std::stringstream
und die Methode str()
, um eine Fließkommazahl in eine Zeichenkette in C++ zu konvertieren
std::stringstream
ist eine mächtige Klasse zur Durchführung von Ein-/Ausgabeoperationen an String-Objekten. In dieser Lösung verwenden wir sie, um eine einzelne Fließkomma-Variable in das stringstream
-Objekt einzufügen. Dann rufen wir die eingebaute Methode str
auf, um numerische Typen zu string
Objekten zu verarbeiten. Beachten Sie, dass die zurückgegebene string
ein temporäres Objekt ist, so dass der Aufruf anderer Methoden auf das Ergebnis einen baumelnden Zeiger ergibt (siehe die im Beispiel auskommentierte Zeile).
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
float n1 = 123.456;
std::stringstream sstream;
sstream << n1;
string num_str = sstream.str();
// auto *ptr = sstream.str().c_str(); // RESULTS in dangling pointer
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
Ausgabe:
123.456
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook