带有qt的.ini文件中的奇怪双重值
Strange double value in .ini file with Qt
我有双成员变量,我将其保存在.ini文件中。保存变量后打开INI文件时,我将此双重值视为" 0.20000000000000001"而不是" 0.2"。如何避免这种情况?我一直在保存以下变量:
iniFile->setValue("mdUpTime", mdUpTime[curSys]);
C 中不存在双重值0.2。当您在C 中编写0.2
时,实际上获得的是双值2.00000000000000011102230246252E-1
。这是因为浮点算术作品的方式(宽松地说这是一个舍入错误,将其从二进制转换为十进制)。
您会得到这个怪异的数字,因为该值在将其转换为INI文件中看到的字符串之前将其四舍五入为固定数量的十进制数字。
如果您确实需要在文件中具有" 0.2",则可以在使用iniFile->setValue
保存之前将其转换为字符串。在此手册转换中,您可以控制十进制数字的数量。
在将双重转换为字符串时,请参阅有关如何限制小数位数的问题。在您的情况下,您可能想要这个:
// Include stringstream at the top of your file
#include <sstream>
[...]
// In your actual code:
// Convert mdUpTime[curSys] into a string, but use no more than 6 decimal digits
// (it uses fewer if there are zeroes at the end).
std::stringstream ss;
ss << setprecision(6) << mdUpTime[curSys];
// Write the string to the ini file
iniFile->setValue("mdUpTime", QString::fromStdString(ss.str()))
阅读值时,您无需手动转换它,QT为您做到这一点。因此,您可以简单地写:
double mdUpTime = iniFile->value("mdUpTime", 0).toDouble();
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Qt Quick-如何仅从c++代码与qml属性交互
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 如何在Qt中取消捕获字符串
- 带有qt的.ini文件中的奇怪双重值
- Qt:从应用程序/可执行目录获取设置ini文件的问题