我需要将一个双精度浮点数存储为字符串。我知道可以使用printf
来显示它,但我只想将其存储在一个字符串变量中,以便稍后将其存储在映射中(作为值,而不是键)。
我需要将一个双精度浮点数存储为字符串。我知道可以使用printf
来显示它,但我只想将其存储在一个字符串变量中,以便稍后将其存储在映射中(作为值,而不是键)。
// 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);
to_string
函数。我正在使用Microsoft Visual C++ 2013。 - user189198提升(boost)的方法:
std::string str = boost::lexical_cast<std::string>(dbl);
标准C++的方式:
std::ostringstream strs;
strs << dbl;
std::string str = strs.str();
注意:不要忘记 #include <sstream>
#include <sstream>
:) - VladL#include <sstream>
,将会出现错误“不允许不完整类型”。 - user1891988.0
转换为字符串时,它会给出字符串 "8.000000"
,而 "8"
就足够了。 - HelloGoodbyefor(int lsd=str.len(); lsd>0 && str[lsd] == '0'; lsd--); str = str.substr(lsd);
- Matt G1e-9
会产生 0.000000
。 - FreelanceConsultant在C++11中,您可以使用std::to_string。
double d = 3.0;
std::string str = std::to_string(d);
std::to_string()
只返回了 0.000000 而不是科学计数法。 - Irfanullah Janstd::stringstream myStringStream
,然后执行 myStringStream << myDouble
。你也可以使用 std::setprecision(x)
。 - Irfanullah Jan如果你使用C++,请避免使用sprintf
。它不符合C++的规范,并且存在一些问题。字符串流是首选方法,最好封装成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++字符串工具库。在其他地方发布过类似的答案。我发现它非常快速可靠。
#include <strtk.hpp>
double pi = M_PI;
std::string pi_as_string = strtk::type_to_string<double>( pi );
lexical_cast的问题在于无法定义精度。通常,如果您将double转换为字符串,那是因为您想将其打印出来。如果精度过高或过低,它会影响您的输出结果。
通常情况下,您需要使用C语言默认的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);
}