Converti Float in String in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’espressione macro per convertire un float in una stringa in C++
  2. Usa il metodo std::to_string() per convertire un float in una stringa in C++
  3. Usa la classe std::stringstream e il metodo str() per convertire un float in una stringa in C++
Converti Float in String 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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C++ Float