2012-01-24 4 views
3

두 개의 GPX (XML) 파일에서 데이터를 읽고이를 특정 방식으로 결합하는 Qt의 간단한 도구를 작성하고 있습니다. 필자는 십진수 6 자리의 정밀도를 갖는 웨이 포인트가 포함 된 트랙 로그를 사용하여 도구를 테스트했습니다. 내가 GPX 파일에서 그것들을 읽을 때, 정밀도는 4 자리 10 진수 (제대로 반올림 됨)로 감소합니다.이 정밀 손실은 어디에서 발생하며 어떻게 예방합니까?

double lat = in.attributes().value("", "lat").toString().toDouble(); 

하지만 :

<trkpt lat="61.5107" lon="23.7777"> 

디버그 출력 정밀도 손실이 라인에서 발생 보여줍니다 그래서 예를 들어이 원래 태그 : 내 도구를 다시 쓸 때

<trkpt lat="61.510656" lon="23.777735"> 

이로 변신 나는 이유를 알 수 없다. in은 텍스트 파일 핸들에서 읽는 QXmlStreamReader입니다.

답변

6

아마도 일 때 값을 XML에 기록한 것일 수 있습니다. 귀하의 질문에 해당 코드를 게시하십시오.

코드를 확인하기 전에 추측 한 경우 QString::number을 사용하여 다시 이중에서 문자열로 변환합니다. 변환의 기본 정밀도는 6입니다. 이는보고있는 것과 일치합니다. 모든 소수를 얻으려면 정밀도를 높일 수 있습니다.

+0

다음과 같이 입력하십시오. qDebug() << "wpt"가 발견되었습니다. << lat << ","<< lon; 위의 라인 다음에 lat와 lon이 이미 4 자리로 반올림되어 있음을 보여줍니다. 물론, qDebug도 동일한 정밀도로 라운드됩니다. – teukkam

+2

시도해보십시오. QString :: number (lat, 'f', 10)' –

+1

모든 것은 결국'QString QString :: number (double n, char 형식 = 'g', int 정밀도)를 사용합니다. = 6)' – MSalters

관련 문제