QVector 追加 truncating/rounding 值
QVector Append truncating/rounding values
我正在使用 QVector.append 将双精度附加到 QVector。使用我的调试器,我可以看到 double 的值为 40.783333499999998,但是,QVector 值四舍五入为 40.7833。同样,我在我的调试器上看到了这个,而不是使用 qDebug,所以我相对确定错误是在 storage/appending 函数中,而不是我代码中其他地方的其他精度损失。向量包含完整值非常重要。我的代码如下。在调试器中,我可以看到 DictionaryOfValues 和迭代器都包含全精度,但 dataMatrix 值是四舍五入的。我似乎无法找到此错误发生的位置。我正在使用 QT 5.2.1 MinGW 32 位。任何帮助将不胜感激。
在此代码中,DictionaryOfValues 是一个 QMap,dataMatrix 是一个 QMap>
QMapIterator<QString,double> i(DictionaryOfValues);
while (i.hasNext())
{
i.next();
dataMatrix[i.key()].append(i.value());
}
实际上这是因为调试器格式化 QVector
值的方式。向量中的实际值根本没有四舍五入。您可以使用以下简单示例通过检查 qDebug
的输出来测试它:
double a = 40.783333499999998;
QVector<double> vec;
vec.append(a);
qDebug() <<"double :"<<qSetRealNumberPrecision(17) <<a;
qDebug() <<"Vector: "<< qSetRealNumberPrecision(17) << vec;
可以看到两个输出是一样的:
double : 40.783333499999998
Vector: QVector(40.783333499999998)
默认精度值为6,使用qDebug
时可以通过qSetRealNumberPrecision
更改。
我正在使用 QVector.append 将双精度附加到 QVector。使用我的调试器,我可以看到 double 的值为 40.783333499999998,但是,QVector 值四舍五入为 40.7833。同样,我在我的调试器上看到了这个,而不是使用 qDebug,所以我相对确定错误是在 storage/appending 函数中,而不是我代码中其他地方的其他精度损失。向量包含完整值非常重要。我的代码如下。在调试器中,我可以看到 DictionaryOfValues 和迭代器都包含全精度,但 dataMatrix 值是四舍五入的。我似乎无法找到此错误发生的位置。我正在使用 QT 5.2.1 MinGW 32 位。任何帮助将不胜感激。
在此代码中,DictionaryOfValues 是一个 QMap,dataMatrix 是一个 QMap>
QMapIterator<QString,double> i(DictionaryOfValues);
while (i.hasNext())
{
i.next();
dataMatrix[i.key()].append(i.value());
}
实际上这是因为调试器格式化 QVector
值的方式。向量中的实际值根本没有四舍五入。您可以使用以下简单示例通过检查 qDebug
的输出来测试它:
double a = 40.783333499999998;
QVector<double> vec;
vec.append(a);
qDebug() <<"double :"<<qSetRealNumberPrecision(17) <<a;
qDebug() <<"Vector: "<< qSetRealNumberPrecision(17) << vec;
可以看到两个输出是一样的:
double : 40.783333499999998
Vector: QVector(40.783333499999998)
默认精度值为6,使用qDebug
时可以通过qSetRealNumberPrecision
更改。