这种精度损失发生在哪里以及如何防止
Where does this precision loss happen and how to prevent it?
我正在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,这与您看到的内容相对应。你可以增加精度来得到所有的小数。
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- C++ 防止在映射中放置()时调用析构函数
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 防止在C++中选择错误文件时提升 xml 解析器崩溃
- 防止在复制构造函数中隐式调用基构造函数
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在哪里存储跨平台C++应用存储?
- C++泛型类错误,问题出在哪里?
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 这种精度损失发生在哪里以及如何防止