C++ 这种精度损失发生在哪里?如何防止?
我正在用Qt编写一个简单的工具,它从两个GPX(XML)文件中读取数据,并以某种方式将它们组合起来。我用包含精度为6位小数的航路点的跟踪日志测试了我的工具。当我从GPX文件中读取它们时,精度降低到4位小数(正确舍入)。例如,这个原始标签:C++ 这种精度损失发生在哪里?如何防止?,c++,qt,xml-parsing,precision,gpx,C++,Qt,Xml Parsing,Precision,Gpx,我正在用Qt编写一个简单的工具,它从两个GPX(XML)文件中读取数据,并以某种方式将它们组合起来。我用包含精度为6位小数的航路点的跟踪日志测试了我的工具。当我从GPX文件中读取它们时,精度降低到4位小数(正确舍入)。例如,这个原始标签: <trkpt lat="61.510656" lon="23.777735"> 但我不明白为什么是从文本文件句柄读取的QXmlStreamReader。可能是在将值写回XML时。请在你的问题中贴上密码 如果在看到代码之前我有一个猜测,那么您正在使
<trkpt lat="61.510656" lon="23.777735">
但我不明白为什么<
中的code>是从文本文件句柄读取的QXmlStreamReader
。可能是在将值写回XML时。请在你的问题中贴上密码
如果在看到代码之前我有一个猜测,那么您正在使用QString::number
将double转换回字符串。转换中的默认精度为6,与您看到的结果相对应。你可以提高精度来获得所有的小数。我把这个放在:qDebug()试试:qDebug(),我打赌所有东西最终都会使用QString QString::number(双n,字符格式='g',int precision=6)
这就是问题所在!数字确实是罪魁祸首。
<trkpt lat="61.5107" lon="23.7777">
double lat = in.attributes().value("", "lat").toString().toDouble();