Converti Float in String in C++
- Usa l’espressione macro per convertire un float in una stringa in C++
-
Usa il metodo
std::to_string()
per convertire un float in una stringa in C++ -
Usa la classe
std::stringstream
e il metodostr()
per convertire un float in una stringa in C++
Questo articolo introduce diversi metodi per convertire un valore float in una stringa in C++.
Usa l’espressione macro per convertire un float in una stringa in C++
Le macro del preprocessore possono essere utilizzate per convertire un numero float costante in un valore stringa. Una cosa da tenere a mente è che questa soluzione si applica solo alla conversione di numeri in virgola mobile letterale. Il seguente esempio di codice mostra come chiamare l’istruzione del costruttore della variabile string
con la macro stringizing. La macro STRINGA
utilizza l’operatore #
per convertire gli argomenti passati in una costante di stringa.
#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;
}
Produzione:
123.456
Nel caso in cui la costante a virgola mobile sia definita come un’altra espressione macro, il codice sopra dovrebbe essere sostituito con una macro a due livelli per produrre risultati corretti come mostrato nel segmento di codice successivo:
#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;
}
Produzione:
123.456
Usa il metodo std::to_string()
per convertire un float in una stringa in C++
La funzione to_string
è definita nell’intestazione <string>
e può convertire vari tipi numerici in un valore string
. Il metodo accetta un valore numerico come parametro e restituisce il valore std::string
. Nota che, to_string
può restituire risultati imprevisti poiché il numero di cifre significative nella stringa restituita può essere zero, come dimostrato nel codice di esempio:
#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;
}
Produzione:
123.456001
0.456000
0.000000
Usa la classe std::stringstream
e il metodo str()
per convertire un float in una stringa in C++
std::stringstream
è una potente classe per condurre operazioni di input / output su oggetti stringa. Lo utilizziamo per inserire una singola variabile a virgola mobile nell’oggetto stringstream
in questa soluzione. Quindi chiamiamo il metodo integrato str
per elaborare il tipo numerico nell’oggetto string
. Notare che la stringa
restituita è un oggetto temporaneo, quindi chiamare altri metodi sul risultato produrrà un puntatore penzolante (vedere la riga commentata nell’esempio).
#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;
}
Produzione:
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