我需要储存一个双作为一串。我知道我可以使用 printf 如果我想显示这一点,但我只想它存储在一个串的变量,这样我可以储存在地图后(作为 , 不该 关键).

有帮助吗?

解决方案

升压(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)"简单的数字访问".也有的 stod 能进行反向操作。

如果你想有一个不同的格式输出比 "%f", 使用 snprintfostringstream 方法中所说明的其他答复。

如果您使用C ++,避免sprintf。这是联合国-C ++ y和有几个问题。 Stringstreams是选择的方法中,优选包封如 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具有一定的优势,因为它确保了改造完成。它使用stringstreams内部。

我想看看 C ++工具包串 Libary。刚刚发布了类似的回答别处。我发现它非常快速和可靠的。

#include <strtk.hpp>

double pi = M_PI;
std::string pi_as_string  = strtk::type_to_string<double>( pi );

香草萨特具有优异制品。我建议你阅读它。我已经 SO 的上之前链接它。

用的lexical_cast的问题是无法以限定精度。一般来说,如果你正在转换双为字符串,那是因为你想打印出来。如果精度是过多或过少,会影响到您的输出。

您也可以使用 stringstream的

嘿,我刚写这个(无关这个问题):

string temp = "";
stringstream outStream;
double ratio = (currentImage->width*1.0f)/currentImage->height;
outStream << " R: " << ratio;
temp = outStream.str();

/* rest of the code */

您可能需要阅读,所以我之前发布。 (Macro'ed版本与临时ostringstream对象。)

有关记录:在我自己的代码,我喜欢的snprintf()。随着本地堆栈上的字符数组,它不是效率低下。 (好吧,也许如果你超出数组的大小和循环做两次......)

(我也通过vsnprintf()包装它。但是,这花了我一些类型检查。Yelp的,如果你想要的代码...)

看看sprintf()和家人。

Normaly此操作必须使用的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);
}

您可以尝试更紧凑的风格:

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");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top