diff --git a/src/FactSystem/Fact.cc b/src/FactSystem/Fact.cc index 8e607759ebe5840c9087320fa5485f710e82ae86..bd33f57662b781c61e950da71afaee9ca75ec04b 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 60fae7dd44984b082a729fdfd0aff00976ab6457..7aeecdb774524d26ead02975daf233e1f00dfeb5 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 87f90a0d3d701846d2758df1e2d3e10829c3668d..96176cbaf70d17f7fea4ed87c4da9cfd24c3c67d 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"; + } } }