Преобразование float в std:: string в C++



у меня есть значение float, которое должно быть помещено в std::string. Как преобразовать из float в string?



float val = 2.5;
std::string my_val = val; // error here
828   8  

8 ответов:

Если вы не беспокоитесь о производительности, используйте строковые потоки:

std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());

Если вы в порядке с Boost,lexical_cast это удобный вариант:

std::string s = boost::lexical_cast<std::string>(myFloat);

эффективные альтернативы, например,FastFormat или просто функции C-типа.

начиная с C++11, стандартная библиотека C++ предоставляет функцию std::to_string(arg) с различными поддерживаемыми типами для arg.

Вы можете определить шаблон, который будет работать не только с дублерами, но и с других типов.

template <typename T> string tostr(const T& t) { 
   ostringstream os; 
   os<<t; 
   return os.str(); 
} 

затем вы можете использовать его для других типов.

double x = 14.4;
int y = 21;

string sx = tostr(x);
string sy = tostr(y);

использовать to_string(). (доступно с c++11)
пример :

#include <iostream>   
#include <string>  

using namespace std;
int main ()
{
    string pi = "pi is " + to_string(3.1415926);
    cout<< "pi = "<< pi << endl;

  return 0;
}

запустите его самостоятельно:http://ideone.com/7ejfaU
Они также доступны:

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

можно использовать std:: to_string в C++11

float val = 2.5;
std::string my_val = std::to_string(val);

Если вы беспокоитесь о производительности, проверьте Boost:: lexical_cast библиотека.

в этом уроке дает простое, но элегантное решение, которое я расшифровываю:

#include <sstream>
#include <string>
#include <stdexcept>

class BadConversion : public std::runtime_error {
public:
  BadConversion(std::string const& s)
    : std::runtime_error(s)
    { }
};

inline std::string stringify(double x)
{
  std::ostringstream o;
  if (!(o << x))
    throw BadConversion("stringify(double)");
  return o.str();
}
...
std::string my_val = stringify(val);

Если вы пытаетесь просто преобразовать переменную с плавающей запятой в строку, вы можете напрямую ее типизировать. (Это работает для меня ;) ) float my_value = 4.32; String a = (String) my_value;

Comments

    Ничего не найдено.