如何将C ++中的double转换为string?
我需要将一个double存储为一个string。 我知道如果我想显示它,我可以使用printf ,但我只是想将它存储在一个stringvariables中,以便稍后(作为值而不是键 )将其存储在地图中。 
boost(tm)方法:
 std::string str = boost::lexical_cast<std::string>(dbl); 
标准的C ++方式:
 std::ostringstream strs; strs << dbl; std::string str = strs.str(); 
  注意 :不要忘记#include <sstream> 
 // The C way: char buffer[32]; snprintf(buffer, sizeof(buffer), "%g", myDoubleVar); // The C++03 way: std::ostringstream sstream; sstream << myDoubleVar; std::string varAsString = sstream.str(); // The C++11 way: std::string varAsString = std::to_string(myDoubleVar); // The boost way: std::string varAsString = boost::lexical_cast<std::string>(myDoubleVar); 
标准C ++ 11的方式(如果你不关心输出格式):
 #include <string> auto str = std::to_string(42.5); 
  to_string是N1803 (r0), N1982 (r1)和N2408 (r2)“ 简单数字访问 ”中引入的新库函数。 还有stodfunction来执行反向操作。 
 如果您希望使用不同于"%f"输出格式,请使用其他答案中所示的snprintf或ostringstream方法。 
 如果您使用C ++,请避免使用sprintf 。 这是un-c ++ y,有几个问题。  Stringstreams是select的方法,最好封装在Boost.LexicalCast中 ,它可以很容易地完成: 
 template <typename T> std::string to_string(T const& value) { stringstream sstr; sstr << value; return sstr.str(); } 
用法:
 string s = to_string(42.5); 
  sprintf是可以的,但在C ++中,转换的更好,更安全和更慢的方法是使用stringstream : 
 #include <sstream> #include <string> // In some function: double d = 453.23; std::ostringstream os; os << d; std::string str = os.str(); 
你也可以使用Boost.LexicalCast :
 #include <boost/lexical_cast.hpp> #include <string> // In some function: double d = 453.23; std::string str = boost::lexical_cast<string>(d); 
 在这两种情况下,之后str应该是"453.23" 。  LexicalCast有一些优点,可以确保转换完成。 它在内部使用stringstream 。 
我会看看C ++string工具包Libary 。 刚在其他地方发表了类似的回答 我发现它非常快速和可靠。
 #include <strtk.hpp> double pi = M_PI; std::string pi_as_string = strtk::type_to_string<double>( pi ); 
香草萨特有一个关于string格式的优秀文章 。 我build议阅读。 我已经把它链接到了。
lexical_cast的问题是无法定义精度。 通常情况下,如果你把一个double转换成一个string,那是因为你想打印出来。 如果精度太高或太低,会影响你的输出。
你可以在C ++ 11中使用std :: to_string
 double d = 3.0; std::string str = std::to_string(d); 
你也可以使用stringstream 。
呃,我只是写了这个(与这个问题无关):
 string temp = ""; stringstream outStream; double ratio = (currentImage->width*1.0f)/currentImage->height; outStream << " R: " << ratio; temp = outStream.str(); /* rest of the code */ 
你可能想阅读我之前在SO上发表的文章。 (具有临时ostringstream对象的macros观版本。)
logging:在我自己的代码中,我喜欢snprintf()。 在本地堆栈上有一个char数组,效率并不高。 (好吧,也许如果你超出了数组大小,并循环做两次…)
(我也通过vsnprintf()包装它,但是这花费了我一些types检查,如果你想要的代码,Yelp …)
通常这个操作你必须使用ecvt,fcvt或者gcvt函数:
 /* gcvt example */ #include <stdio.h> #include <stdlib.h> main () { char buffer [20]; gcvt (1365.249,6,buffer); puts (buffer); gcvt (1365.249,3,buffer); puts (buffer); return 0; } Output: 1365.25 1.37e+003 
作为功能:
 void double_to_char(double f,char * buffer){ gcvt(f,10,buffer); } 
 看看sprintf()和家人。 
你可以尝试一个更紧凑的风格:
 std::string number_in_string; double number_in_double; std::ostringstream output; number_in_string = (dynamic_cast< std::ostringstream*>(&(output << number_in_double << std::endl)))->str(); 
 使用to_string() 。 
 例如: 
 #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); 
你可以使用这个函数将任何东西转换成任何东西:
 template<class T = std::string, class U> T to(U a) { std::stringstream ss; T ret; ss << a; ss >> ret; return ret; }; 
用法:
 std::string str = to(2.5); double d = to<double>("2.5");