diff --git a/src/blackmisc/pq/measurementunit.cpp b/src/blackmisc/pq/measurementunit.cpp index 57ae043d7..48d563e85 100644 --- a/src/blackmisc/pq/measurementunit.cpp +++ b/src/blackmisc/pq/measurementunit.cpp @@ -35,9 +35,9 @@ namespace BlackMisc return m_data->m_fromDefault(unit.m_data->m_toDefault(value)); } - QString CMeasurementUnit::makeRoundedQStringWithUnit(double value, int digits, bool i18n) const + QString CMeasurementUnit::makeRoundedQStringWithUnit(double value, int digits, bool withGroupSeparator, bool i18n) const { - return this->makeRoundedQString(value, digits).append(this->getSymbol(i18n)); + return this->makeRoundedQString(value, digits, withGroupSeparator).append(this->getSymbol(i18n)); } double CMeasurementUnit::roundValue(double value, int digits) const @@ -52,12 +52,21 @@ namespace BlackMisc return CMathUtils::roundEpsilon(value, this->getEpsilon()); } - QString CMeasurementUnit::makeRoundedQString(double value, int digits, bool i18n) const + QString CMeasurementUnit::makeRoundedQString(double value, int digits, bool withGroupSeparator, bool i18n) const { Q_UNUSED(i18n); - if (digits < 0) digits = m_data->m_displayDigits; + if (digits < 0) { digits = m_data->m_displayDigits; } const double v = CMathUtils::round(value, digits); - const QString s = QLocale::system().toString(v, 'f', digits); + + // create locale without separator + static const QLocale localeWithoutSeparator = [] + { + QLocale q = QLocale::system(); + q.setNumberOptions(QLocale::OmitGroupSeparator); + return q; + }(); + + const QString s = (withGroupSeparator ? QLocale::system() : localeWithoutSeparator).toString(v, 'f', digits); return s; } } // namespace diff --git a/src/blackmisc/pq/measurementunit.h b/src/blackmisc/pq/measurementunit.h index ba6a9705d..54d27423c 100644 --- a/src/blackmisc/pq/measurementunit.h +++ b/src/blackmisc/pq/measurementunit.h @@ -314,11 +314,11 @@ namespace BlackMisc //! Rounded string utility method, virtual so units can have specialized formatting //! \note default digits is CMeasurementUnit::getDisplayDigits - virtual QString makeRoundedQString(double value, int digits = -1, bool i18n = false) const; + virtual QString makeRoundedQString(double value, int digits = -1, bool withGroupSeparator = false, bool i18n = false) const; //! Value rounded with unit, e.g. "5.00m", "30kHz" //! \note default digits is CMeasurementUnit::getDisplayDigits - virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool i18n = false) const; + virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool withGroupSeparator = false, bool i18n = false) const; //! Threshold for comparions double getEpsilon() const diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index b9f8e00c4..b683da2a9 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -42,7 +42,7 @@ namespace BlackMisc namespace PhysicalQuantities { template - const MU & CPhysicalQuantity::getUnit() const + const MU &CPhysicalQuantity::getUnit() const { return m_unit; } @@ -314,18 +314,18 @@ namespace BlackMisc } template - QString CPhysicalQuantity::valueRoundedWithUnit(const MU &unit, int digits, bool i18n) const + QString CPhysicalQuantity::valueRoundedWithUnit(const MU &unit, int digits, bool withGroupSeparator, bool i18n) const { Q_ASSERT_X(!unit.isNull(), Q_FUNC_INFO, "Cannot convert to null"); if (this->isNull()) { return this->convertToQString(i18n); } - return unit.makeRoundedQStringWithUnit(this->value(unit), digits, i18n); + return unit.makeRoundedQStringWithUnit(this->value(unit), digits, withGroupSeparator, i18n); } template - QString CPhysicalQuantity::valueRoundedWithUnit(int digits, bool i18n) const + QString CPhysicalQuantity::valueRoundedWithUnit(int digits, bool withGroupSeparator, bool i18n) const { if (this->isNull()) { return this->convertToQString(i18n); } - return this->valueRoundedWithUnit(m_unit, digits, i18n); + return this->valueRoundedWithUnit(m_unit, digits, withGroupSeparator, i18n); } template diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index 2c1c56501..6564454d7 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -47,11 +47,11 @@ namespace BlackMisc */ template class CPhysicalQuantity : public Mixin::DBusOperators>, - public Mixin::JsonOperators>, - public Mixin::Index, - public Mixin::MetaType, - public Mixin::String, - public Mixin::Icon> + public Mixin::JsonOperators>, + public Mixin::Index, + public Mixin::MetaType, + public Mixin::String, + public Mixin::Icon> { //! \copydoc CValueObject::compare friend int compare(const PQ &a, const PQ &b) { return compareImpl(a, b); } @@ -122,11 +122,11 @@ namespace BlackMisc //! Value to QString with the given unit, e.g. "5.00m" //! \note default digits is CMeasurementUnit::getDisplayDigits - QString valueRoundedWithUnit(const MU &unit, int digits = -1, bool i18n = false) const; + QString valueRoundedWithUnit(const MU &unit, int digits = -1, bool withGroupSeparator = false, bool i18n = false) const; //! Value to QString with the current unit, e.g. "5.00m" //! \note default digits is CMeasurementUnit::getDisplayDigits - QString valueRoundedWithUnit(int digits = -1, bool i18n = false) const; + QString valueRoundedWithUnit(int digits = -1, bool withGroupSeparator = false, bool i18n = false) const; //! Round current value in current unit to epsilon //! \sa CMeasurementUnit::roundToEpsilon diff --git a/src/blackmisc/pq/units.cpp b/src/blackmisc/pq/units.cpp index ea317e74b..92c6c919d 100644 --- a/src/blackmisc/pq/units.cpp +++ b/src/blackmisc/pq/units.cpp @@ -41,9 +41,9 @@ namespace BlackMisc void CAccelerationUnit::anchor() { } - QString CAngleUnit::makeRoundedQStringWithUnit(double value, int digits, bool i18n) const + QString CAngleUnit::makeRoundedQStringWithUnit(double value, int digits, bool withGroupSeparator, bool i18n) const { - if (digits < 0) digits = this->getDisplayDigits(); + if (digits < 0) { digits = this->getDisplayDigits(); } QString s; if ((*this) == CAngleUnit::sexagesimalDeg()) { @@ -68,14 +68,14 @@ namespace BlackMisc } else { - s = this->CMeasurementUnit::makeRoundedQStringWithUnit(value, digits, i18n); + s = this->CMeasurementUnit::makeRoundedQStringWithUnit(value, digits, withGroupSeparator, i18n); } return s; } - QString CTimeUnit::makeRoundedQStringWithUnit(double value, int digits, bool i18n) const + QString CTimeUnit::makeRoundedQStringWithUnit(double value, int digits, bool withGroupSeparator, bool i18n) const { - if (digits < 0) digits = this->getDisplayDigits(); + if (digits < 0) { digits = this->getDisplayDigits(); } QString s; if ((*this) == CTimeUnit::hms()) { @@ -110,7 +110,7 @@ namespace BlackMisc } else { - s = this->CMeasurementUnit::makeRoundedQStringWithUnit(value, digits, i18n); + s = this->CMeasurementUnit::makeRoundedQStringWithUnit(value, digits, withGroupSeparator, i18n); } return s; } diff --git a/src/blackmisc/pq/units.h b/src/blackmisc/pq/units.h index c44e8c4ac..41f789ac6 100644 --- a/src/blackmisc/pq/units.h +++ b/src/blackmisc/pq/units.h @@ -200,7 +200,7 @@ namespace BlackMisc } //! \copydoc CMeasurementUnit::makeRoundedQStringWithUnit - virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool i18n = false) const override; + virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool withGroupSeparator = false, bool i18n = false) const override; //! Radians static const CAngleUnit &rad() @@ -820,7 +820,7 @@ namespace BlackMisc } //! \copydoc CMeasurementUnit::makeRoundedQStringWithUnit - virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool i18n = false) const override; + virtual QString makeRoundedQStringWithUnit(double value, int digits = -1, bool withGroupSeparator = false, bool i18n = false) const override; //! Second s static const CTimeUnit &s()