我在将字符串转换为double时遇到问题。我得到一个带有纬度/长坐标的字符串,格式为33.9425/N 118.4081/W
我首先调用我的函数trimLastChar(std::string& input)
两次,这将删除北,南,东,西字符,然后是正斜杠。此函数正确地将33.9425
和118.4081
作为std::string
正确地返回。
我使用以下代码将我的std::string
转换为double
...但是问题是,转换损失的精确度 - 我怀疑它会被舍入?。
// Location In String is what trimLastChar returns
std::stringstream stream(locationInString);
std::cout << "DEBUG: before: " << locationInString << " ";
// output is a double* output = new double passed by reference to my function
stream >> output;
std::cout << output << std::endl;
这种情况下的输出会产生:
33.9425
118.408
正如您所注意到的,正确的值应为118.4081
,但缺少1 ...
任何想法如何解决?或者更重要的是,为什么会发生这种情况?
答案 0 :(得分:7)
输入时精度没有丢失。它在输出时丢失了。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
double v = 118.4081;
cout << v << endl;
cout.precision(10);
cout << v << endl;
}
输出:
$ g++ -Wall x.cpp && ./a.out
118.408
118.4081
$
答案 1 :(得分:3)
您可能拥有比输出节目更多的数字。默认情况下,只显示少量数字,您需要使用std::setprecision
查看更多数字。试试
std::cout << std::setprecision(10) << output << std::endl;