【问题标题】:QVector Append truncating/rounding valuesQVector 追加截断/舍入值
【发布时间】:2015-03-04 08:08:25
【问题描述】:

我正在使用 QVector.append 将双精度附加到 QVector。使用我的调试器,我可以看到 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());
    }

【问题讨论】:

  • 或者它与调试器如何格式化变量有关
  • 尝试使用std::vector 并将结果与​​QVector 进行比较。理论上,这些数据结构只是复制变量,不会影响数据的内容。
  • 我已经考虑过了,但是每个值都被格式化为双精度值。我认为这意味着他们都受到相同的对待,对吧?

标签: c++ qt truncation qvector qdebug


【解决方案1】:

实际上这是因为调试器格式化QVector 值的方式。向量中的实际值根本没有四舍五入。您可以使用这个简单的示例检查qDebug 的输出来测试它:

double a = 40.783333499999998;

QVector<double> vec;
vec.append(a);

qDebug() <<"double :"<<qSetRealNumberPrecision(17) <<a;
qDebug() <<"Vector: "<< qSetRealNumberPrecision(17) << vec;

你可以看到两个输出是一样的:

双倍:40.783333499999998
向量:QVector(40.783333499999998)

默认精度值为6,使用qDebug时可以通过qSetRealNumberPrecision更改。

【讨论】:

  • 果然。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 2013-08-21
  • 1970-01-01
相关资源
最近更新 更多