1、std:to_string()方法只能精确到6位小数点
double d = 3.1415926535897932384;
std::string str = std::to_string(d);
std::cout << str << std::endl; // 3.141593
2、使用stringstream,在输入流时使用setprecision设置精度
double d = 3.1415926535897932384;
std::string str = std::to_string(d);
std::cout << str << std::endl; // 3.141593
std::stringstream ss;
ss << std::setprecision(15) << d;
str = ss.str(); // 3.14159265358979
完整测试代码如下:
#include <iostream>
#include <sstream>
#include <iomanip>
int main(int argc, char *argv[])
{
double d = 3.1415926535897932384;
std::string str = std::to_string(d);
std::cout << str << std::endl; // 3.141593
std::stringstream ss;
ss << std::setprecision(15) << d;
str = ss.str();
std::cout << str << std::endl; //3.14159265358979
return 0;
}
注意:
经测试设置精度到20位实际准确只有15位,后面的数据就不可靠了。