diff --git a/src/GcRideFile.cpp b/src/GcRideFile.cpp index db7882862..70835d789 100644 --- a/src/GcRideFile.cpp +++ b/src/GcRideFile.cpp @@ -158,10 +158,15 @@ GcFileReader::openRideFile(QFile &file, QStringList &errors) const return rideFile; } +// normal precision (Qt defaults) #define add_sample(name) \ if (present->name) \ sample.setAttribute(#name, QString("%1").arg(point->name)); +// high precision (6 decimals) +#define add_sample_hp(name) \ + if (present->name) \ + sample.setAttribute(#name, QString("%1").arg(point->name, 0, 'g', 11)); void GcFileReader::writeRideFile(const RideFile *ride, QFile &file) const { @@ -242,7 +247,7 @@ GcFileReader::writeRideFile(const RideFile *ride, QFile &file) const QDomElement sample = doc.createElement("sample"); samples.appendChild(sample); assert(present->secs); - add_sample(secs); + add_sample_hp(secs); add_sample(cad); add_sample(hr); add_sample(km); @@ -250,8 +255,8 @@ GcFileReader::writeRideFile(const RideFile *ride, QFile &file) const add_sample(nm); add_sample(watts); add_sample(alt); - add_sample(lon); - add_sample(lat); + add_sample_hp(lon); + add_sample_hp(lat); sample.setAttribute("len", QString("%1").arg(ride->recIntSecs())); } } diff --git a/src/TcxParser.cpp b/src/TcxParser.cpp index a20f5d958..76488c5b0 100644 --- a/src/TcxParser.cpp +++ b/src/TcxParser.cpp @@ -18,10 +18,14 @@ */ #include +#include #include "TcxParser.h" #include "TimeUtils.h" +// use stc strtod to bypass Qt toDouble() issues +#include + TcxParser::TcxParser (RideFile* rideFile) : rideFile(rideFile) { @@ -91,11 +95,13 @@ TcxParser::endElement( const QString&, const QString&, const QString& qName) } else if (qName == "LongitudeDegrees") { - lon = buffer.toDouble(); + char *p; + lon = strtod(buffer.toLatin1(), &p); } else if (qName == "LatitudeDegrees") { - lat = buffer.toDouble(); + char *p; + lat = strtod(buffer.toLatin1(), &p); } else if (qName == "Trackpoint") {