如何将字符串转换为具有一定精度的双精度?

时间:2019-04-12 19:55:54

标签: c++

我正在解析文件,并尝试使用stringstream提取存储在字符串中的值,并将其转换为双精度,同时保持该字符串中的所有数字相同。

我尝试将stringstream的精度设置为12,也尝试将其设置为fixed。但是,当我尝试使用atof()或stod()对其进行转换时,它将仅保留6个值,例如:12.2343。当我需要它保留9个以上的值时。

这是我当前拥有的代码。

while (!inFile.eof())
{
string latData; // hold the data from the string stream
string lonData; // hold the data from the string stream
string altData; // hold the data from the string stream
string yawData; // hold the data from the string stream
string trashCollect; // hold the trash info we dont need 
double latTemp = 0; // hold the temp value to be stored in array    double lonTemp = 0; // hold the temp value to be stored in array
double altTemp = 0; // hold the temp value to be stored in array 
double yawTemp = 0; // hold the temp value to be stored in array
int count2 = 0; //count through the trash data

stringstream stringManager(line); //manage the line

getline(stringManager, latData, ','); //store the latitude
cout << latData << endl;
system("pause");
latTemp = stod(latData); // covert to a double
cout << latTemp << endl;
system("pause");

我期望latTemp值的输出与latData值相同。例如,如果latData为12.5432345,我希望letTemp相同。但是,使用stod()将字符串转换为双精度后,我得到12.5432。

1 个答案:

答案 0 :(得分:1)

使用stod()从字符串到双精度字符串的转换是完全精确的,尽管在打印时字符串会被截断。除非将结果传递给要更新其精度的流,否则调用setprecision不会做任何事情。

要做:

std::cout << std::setprecision(9) << latTemp;

要以9位精度进行打印