这种精度损失发生在哪里以及如何防止

Where does this precision loss happen and how to prevent it?

本文关键字:何防止 在哪里 精度 损失      更新时间:2023-10-16

我正在Qt中编写一个简单的工具,它从两个GPX(XML)文件中读取数据,并以某种方式将它们组合在一起。我用跟踪日志测试了我的工具,这些日志包含精度为6位小数的路点。当我从GPX文件中读取它们时,精度会降低到小数点后4位(适当四舍五入)。例如,这个原始标签:

<trkpt lat="61.510656" lon="23.777735">

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

<trkpt lat="61.5107" lon="23.7777">

调试输出显示精度损失发生在以下行:

double lat = in.attributes().value("", "lat").toString().toDouble();

但我不明白为什么。in是从文本文件句柄读取的QXmlStreamReader

可能是在将值写回XML时。请在您的问题中张贴该代码。

如果在看到代码之前我有一个猜测,那么您正在使用QString::number将double转换回字符串。转换中的默认精度为6,这与您看到的内容相对应。你可以增加精度来得到所有的小数。