我有一個float值需要放入std::string
。我如何從浮動轉換爲字符串?在C++中將float轉換爲std :: string
float val = 2.5;
std::string my_val = val; // error here
我有一個float值需要放入std::string
。我如何從浮動轉換爲字符串?在C++中將float轉換爲std :: string
float val = 2.5;
std::string my_val = val; // error here
除非你擔心性能,使用string streams:
std::ostringstream ss;
ss << myFloat;
std::string s(ss.str());
如果您能夠接受升壓,lexical_cast<>是一個方便的選擇:
std::string s = boost::lexical_cast<std::string>(myFloat);
高效的替代品如FastFormat或簡單的C風格的功能。
考慮到這些函數很少被調用(調整窗口大小),這將是一個適當的解決方案,但是有沒有更高效的方法? – 2010-01-24 04:03:50
如果您對Boost不太好,請編寫您自己的詞彙轉換函數;它大概有五行代碼,並且是一個非常有用的庫函數(有關基本實現,請參閱http://www.gotw.ca/publications/mill19.htm)。 – 2010-01-24 05:01:07
如果您擔心性能,請查看Boost::lexical_cast庫。
我認爲你的意思是「如果你不擔心表現」。 'boost :: lexical_cast'是你可以挑選的最重的解決方案! – Tom 2010-01-24 06:03:02
您可以定義一個模板,它不僅適用於雙打,而且適用於其他類型。
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);
作爲C++ 11,標準C++庫提供了功能std::to_string(arg)
與各種支持的類型爲arg
。
使用浮動時,請注意std :: to_string()的可能意外行爲。 (請參閱http://en.cppreference.com/w/cpp/string/basic_string/to_string上的示例輸出。 – 2016-04-22 13:35:03
這應該被提升爲最佳答案,因爲大多數構建環境都會支持C++ 11 – deddebme 2017-04-26 18:20:56
This tutorial給出了一個簡單而優雅,解決方案,我抄寫:
#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);
使用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()的可能意外行爲。 (請參閱http://en.cppreference.com/w/cpp/string/basic_string/to_string上的示例輸出。 – 2016-04-22 13:36:12
單挑,請勿複製粘貼提交的grace_period_edit答案。複製 - 粘貼 - 編輯 - 提交它們。我們得到一個自動標誌。下次照顧。乾杯 – 2017-03-27 12:46:11
請考慮閱讀Herb Sutter的文章「The Manor Formatters of Manor Farm」(http://www.gotw.ca/publications /mill19.htm)。它提供了五種常用格式化方法的例子,並討論它們的優點和缺點。 – 2010-01-24 05:04:04