2010-01-24 303 views
47

我有一個float值需要放入std::string。我如何從浮動轉換爲字符串?在C++中將float轉換爲std :: string

float val = 2.5; 
std::string my_val = val; // error here 
+4

請考慮閱讀Herb Sutter的文章「The Manor Formatters of Manor Farm」(http://www.gotw.ca/publications /mill19.htm)。它提供了五種常用格式化方法的例子,並討論它們的優點和缺點。 – 2010-01-24 05:04:04

回答

42

除非你擔心性能,使用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風格的功能。

+0

考慮到這些函數很少被調用(調整窗口大小),這將是一個適當的解決方案,但是有沒有更高效的方法? – 2010-01-24 04:03:50

+1

如果您對Boost不太好,請編寫您自己的詞彙轉換函數;它大概有五行代碼,並且是一個非常有用的庫函數(有關基本實現,請參閱http://www.gotw.ca/publications/mill19.htm)。 – 2010-01-24 05:01:07

2

如果您擔心性能,請查看Boost::lexical_cast庫。

+9

我認爲你的意思是「如果你不擔心表現」。 'boost :: lexical_cast'是你可以挑選的最重的解決方案! – Tom 2010-01-24 06:03:02

14

您可以定義一個模板,它不僅適用於雙打,而且適用於其他類型。

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); 
87

作爲C++ 11,標準C++庫提供了功能std::to_string(arg)與各種支持的類型爲arg

+2

使用浮動時,請注意std :: to_string()的可能意外行爲。 (請參閱http://en.cppreference.com/w/cpp/string/basic_string/to_string上的示例輸出。 – 2016-04-22 13:35:03

+0

這應該被提升爲最佳答案,因爲大多數構建環境都會支持C++ 11 – deddebme 2017-04-26 18:20:56

0

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); 
8

使用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); 
+1

在使用浮動時,請注意std :: to_string()的可能意外行爲。 (請參閱http://en.cppreference.com/w/cpp/string/basic_string/to_string上的示例輸出。 – 2016-04-22 13:36:12

2

可以在C++ 11

使用 std::to_string
float val = 2.5; 
std::string my_val = std::to_string(val); 
+1

單挑,請勿複製粘貼提交的grace_period_edit答案。複製 - 粘貼 - 編輯 - 提交它們。我們得到一個自動標誌。下次照顧。乾杯 – 2017-03-27 12:46:11

相關問題