From d73f8642eed4bd57049b3ee418505bb80442d256 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 7 Mar 2016 09:12:40 -0800 Subject: [PATCH] Save params with 18 digit precision --- src/FactSystem/Fact.cc | 22 ++++++++++++++-------- src/FactSystem/Fact.h | 5 ++++- src/FactSystem/ParameterLoader.cc | 8 +++++--- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index 8e607759e..bd33f5766 100644 --- a/src/FactSystem/Fact.cc +++ b/src/FactSystem/Fact.cc @@ -249,7 +249,7 @@ QVariantList Fact::bitmaskValues(void) const } } -QString Fact::_variantToString(const QVariant& variant) const +QString Fact::_variantToString(const QVariant& variant, int decimalPlaces) const { QString valueString; @@ -260,7 +260,7 @@ QString Fact::_variantToString(const QVariant& variant) const if (qIsNaN(fValue)) { valueString = QStringLiteral("--.--"); } else { - valueString = QString("%1").arg(fValue, 0, 'f', decimalPlaces()); + valueString = QString("%1").arg(fValue, 0, 'f', decimalPlaces); } } break; @@ -270,7 +270,7 @@ QString Fact::_variantToString(const QVariant& variant) const if (qIsNaN(dValue)) { valueString = QStringLiteral("--.--"); } else { - valueString = QString("%1").arg(dValue, 0, 'f', decimalPlaces()); + valueString = QString("%1").arg(dValue, 0, 'f', decimalPlaces); } } break; @@ -282,14 +282,20 @@ QString Fact::_variantToString(const QVariant& variant) const return valueString; } +QString Fact::rawValueStringFullPrecision(void) const +{ + return _variantToString(rawValue(), 18); +} + + QString Fact::rawValueString(void) const { - return _variantToString(rawValue()); + return _variantToString(rawValue(), decimalPlaces()); } QString Fact::cookedValueString(void) const { - return _variantToString(cookedValue()); + return _variantToString(cookedValue(), decimalPlaces()); } QVariant Fact::rawDefaultValue(void) const @@ -320,7 +326,7 @@ QVariant Fact::cookedDefaultValue(void) const QString Fact::cookedDefaultValueString(void) const { - return _variantToString(cookedDefaultValue()); + return _variantToString(cookedDefaultValue(), decimalPlaces()); } FactMetaData::ValueType_t Fact::type(void) const @@ -390,7 +396,7 @@ QVariant Fact::cookedMin(void) const QString Fact::cookedMinString(void) const { - return _variantToString(cookedMin()); + return _variantToString(cookedMin(), decimalPlaces()); } QVariant Fact::rawMax(void) const @@ -415,7 +421,7 @@ QVariant Fact::cookedMax(void) const QString Fact::cookedMaxString(void) const { - return _variantToString(cookedMax()); + return _variantToString(cookedMax(), decimalPlaces()); } bool Fact::minIsDefaultForType(void) const diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index 60fae7dd4..7aeecdb77 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -116,6 +116,9 @@ public: QString enumOrValueString (void); // This is not const, since an unknown value can modify the enum lists double increment (void) const; + /// Returns the values as a string with full 18 digit precision if float/double. + QString rawValueStringFullPrecision(void) const; + void setRawValue (const QVariant& value); void setCookedValue (const QVariant& value); void setEnumIndex (int index); @@ -165,7 +168,7 @@ signals: void _containerRawValueChanged(const QVariant& value); protected: - QString _variantToString(const QVariant& variant) const; + QString _variantToString(const QVariant& variant, int decimalPlaces) const; void _sendValueChangedSignal(QVariant value); QString _name; diff --git a/src/FactSystem/ParameterLoader.cc b/src/FactSystem/ParameterLoader.cc index 87f90a0d3..96176cbaf 100644 --- a/src/FactSystem/ParameterLoader.cc +++ b/src/FactSystem/ParameterLoader.cc @@ -735,9 +735,11 @@ void ParameterLoader::writeParametersToStream(QTextStream &stream) foreach (int componentId, _mapParameterName2Variant.keys()) { foreach (const QString ¶mName, _mapParameterName2Variant[componentId].keys()) { Fact* fact = _mapParameterName2Variant[componentId][paramName].value(); - Q_ASSERT(fact); - - stream << _vehicle->id() << "\t" << componentId << "\t" << paramName << "\t" << fact->rawValueString() << "\t" << QString("%1").arg(_factTypeToMavType(fact->type())) << "\n"; + if (fact) { + stream << _vehicle->id() << "\t" << componentId << "\t" << paramName << "\t" << fact->rawValueStringFullPrecision() << "\t" << QString("%1").arg(_factTypeToMavType(fact->type())) << "\n"; + } else { + qWarning() << "Internal error: missing fact"; + } } } -- 2.22.0