这种精确损失在哪里发生以及如何预防?

teu*_*kam 3 c++ precision qt gpx xml-parsing

我在Qt中编写了一个简单的工具,它从两个GPX(XML)文件中读取数据并以某种方式组合它们.我用跟踪日志测试了我的工具,其中包含具有6位十进制数字精度的航路点.当我从GPX文件中读取它们时,精度会降低到4位小数(正确舍入).例如,这个原始标签:

<trkpt lat="61.510656" lon="23.777735">
Run Code Online (Sandbox Code Playgroud)

当我的工具再次写入它时变成这个:

<trkpt lat="61.5107" lon="23.7777">
Run Code Online (Sandbox Code Playgroud)

调试输出显示此行发生的精度损失:

double lat = in.attributes().value("", "lat").toString().toDouble();
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么.inQXmlStreamReader从文本文件句柄读取.

Dav*_*eer 6

可能是在将值回XML时.请在您的问题中发布该代码.

如果我在看到代码之前猜到了,那么您正在使用QString::number从双回转换为字符串.转换中的默认精度为6,这与您所看到的相对应.您可以提高精度以获取所有小数.

  • 尝试:`qDebug()<< QString :: number(lat,'f',10)` (2认同)