QVector附加截断/舍入值

时间:2015-01-06 16:00:03

标签: c++ qt truncation qvector qdebug

我正在使用QVector.append向QVector添加一个double。使用我的调试器,我可以看到double的值为40.783333499999998,但是,QVector值舍入为40.7833。再次,我在我的调试器上看到了这一点,而不是使用qDebug,所以我相对确定错误在存储/追加函数中,而不是在我的代码中的其他地方的其他精度损失。矢量包含完整值非常重要。我的代码如下。在调试器中,我可以看到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());
    }

1 个答案:

答案 0 :(得分:3)

实际上,这是因为调试器格式化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
  矢量:QVector(40.783333499999998)

默认精度值为6.使用qSetRealNumberPrecision时,您可以qDebug更改它。