带有qt的.ini文件中的奇怪双重值

Strange double value in .ini file with Qt

本文关键字:qt ini 文件 带有      更新时间:2023-10-16

我有双成员变量,我将其保存在.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();