2015-01-06 15 views
2

QVector.append를 사용하여 QVector에 double을 추가하려고합니다. 내 디버거를 사용하면 이중 40.783333499999998 값을 볼 수 있지만 QVector 값은 40.7833 반올림됩니다. 다시 말하지만 qDebug를 사용하지 않고 내 디버거에서이 오류를 볼 수 있습니다. 따라서 오류가 저장소/추가 기능에 있고 코드의 다른 곳에서 정밀도가 손실되지 않았 음을 확신합니다. 벡터가 전체 값을 포함하는 것이 매우 중요합니다. 내 코드는 아래와 같습니다. 디버거에서 DictionaryOfValues와 iterator 모두 완전한 정밀도를 포함하고 있지만 dataMatrix 값은 반올림됨을 알 수 있습니다. 이 오류가 발생한 곳을 찾을 수없는 것 같습니다. 저는 QT 5.2.1 MinGW 32 비트를 사용하고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다. 이 코드에서 QVector 자르기/반올림 값 추가

는 DictionaryOfValues는 QMap이며, 데이터 매트릭스는 QMap> 사실

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

또는 디버거에서 변수 서식을 지정하는 방법과 관련이 있습니다 –

+0

'std :: vector '를 사용하여 결과를'QVector '와 비교해보십시오. 이론적으로이 데이터 구조는 변수 만 복사하며 데이터의 내용에는 영향을주지 않습니다. –

+0

나는 그것에 대해 생각해 봤지만 모든 값은 double로 포맷되어있다. 나는 그들이 모두 똑같은 취급을받는다고 생각할 것입니다. – french13

답변

3

그 방식 때문에 디버거 형식 QVector 값의의입니다. 벡터의 실제 값은 반올림되지 않습니다.

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이 간단한 예를 사용 qDebug의 출력을 선택하여 테스트 할)

기본 정밀도 값은 6입니다. qDebug을 사용하면 qSetRealNumberPrecision으로 변경할 수 있습니다.

+0

물론입니다. 당신의 도움을 주셔서 감사합니다! – french13