QVector Добавить значения усечения / округления

Я использую QVector.append, чтобы добавить двойку к QVector. Используя мой отладчик, я вижу, что double имеет значение 40.783333499999998, однако значения QVector округлены до 40.7833. Опять же, я вижу это в моем отладчике, не использующем qDebug, поэтому я относительно уверен, что ошибка в функции хранения / добавления, а не в какой-то другой потере точности в другом месте моего кода. Очень важно, чтобы вектор содержал полное значение. Мой код ниже. В отладчике я вижу, что и DictionaryOfValues, и итератор содержат полную точность, но значение dataMatrix округляется. Кажется, я не могу найти, где происходит эта ошибка. Я использую QT 5.2.1 MinGW 32 bit. Любая помощь будет принята с благодарностью.

В этом коде DictionaryOfValues ​​- это QMap, а dataMatrix — это QMap>

    QMapIterator<QString,double> i(DictionaryOfValues);
while (i.hasNext())
{
i.next();
dataMatrix[i.key()].append(i.value());
}

2

Решение

На самом деле это из-за способа отладки форматов 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. Вы можете изменить его qSetRealNumberPrecision когда используешь qDebug,

3

Другие решения


По вопросам рекламы [email protected]