Я использую 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());
}
На самом деле это из-за способа отладки форматов 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
,