From e4f98b4512bb4a28ba6689f177b792c615b0d691 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 20 Apr 2021 14:07:20 +0200 Subject: [PATCH] Base: add convenience functions to create a QString from quantity or double --- src/Base/Quantity.cpp | 8 ++++++++ src/Base/Quantity.h | 1 + src/Base/UnitsApi.cpp | 11 +++++++++++ src/Base/UnitsApi.h | 7 +++++++ 4 files changed, 27 insertions(+) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index d90413c109..4e1da56480 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -63,6 +63,14 @@ QuantityFormat::QuantityFormat() { } +QuantityFormat::QuantityFormat(QuantityFormat::NumberFormat format, int decimals) + : option(OmitGroupSeparator | RejectGroupSeparator) + , format(format) + , precision(decimals < 0 ? UnitsApi::getDecimals() : decimals) + , denominator(defaultDenominator) +{ +} + // ---------------------------------------------------------------------------- Quantity::Quantity() diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index d142fca0df..d5b11331f0 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -75,6 +75,7 @@ struct BaseExport QuantityFormat { denominator = denom; } QuantityFormat(); + QuantityFormat(NumberFormat format, int decimals=-1); inline char toFormat() const { switch (format) { case Fixed: diff --git a/src/Base/UnitsApi.cpp b/src/Base/UnitsApi.cpp index e5fdf5fd0d..5512a438f9 100644 --- a/src/Base/UnitsApi.cpp +++ b/src/Base/UnitsApi.cpp @@ -154,6 +154,17 @@ void UnitsApi::setSchema(UnitSystem s) UserPrefSystem->setSchemaUnits(); // if necessary a unit schema can change the constants in Quantity (e.g. mi=1.8km rather then 1.6km). } +QString UnitsApi::toNumber(const Base::Quantity& q, const QuantityFormat& f) +{ + QString number = QString::fromLatin1("%1").arg(q.getValue(), 0, f.toFormat(), f.precision); + return number; +} + +QString UnitsApi::toNumber(double d, const QuantityFormat& f) +{ + QString number = QString::fromLatin1("%1").arg(d, 0, f.toFormat(), f.precision); + return number; +} //double UnitsApi::translateUnit(const char* str) //{ diff --git a/src/Base/UnitsApi.h b/src/Base/UnitsApi.h index a6e4e1a21a..17d4d36ab5 100644 --- a/src/Base/UnitsApi.h +++ b/src/Base/UnitsApi.h @@ -66,6 +66,13 @@ public: return UnitsApi::schemaTranslate(quant, dummy1, dummy2); } + /** Get a number as string for a quantity of a given format. + * The string is a number in C locale (i.e. the decimal separator is always a dot) and if + * needed represented in scientific notation. The string doesn't include the unit of the quantity. + */ + static QString toNumber(const Base::Quantity& q, const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); + static QString toNumber(double d, const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); + /// generate a value for a quantity with default user preferred system static double toDbl(PyObject *ArgObj,const Base::Unit &u=Base::Unit()); /// generate a value for a quantity with default user preferred system