diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index a3955672d..78df8401b 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -318,10 +318,25 @@ namespace BlackMisc int CPhysicalQuantity::valueInteger(MU unit) const { Q_ASSERT_X(!unit.isNull(), Q_FUNC_INFO, "Cannot convert to null"); - double v = unit.roundValue(this->value(unit), 0); + const double v = unit.roundValue(this->value(unit), 0); return static_cast(v); } + template + int CPhysicalQuantity::valueInteger() const + { + return this->valueInteger(m_unit); + } + + template + bool CPhysicalQuantity::isInteger() const + { + if (this->isNull()) { return false; } + + const double diff = std::abs(this->value() - this->valueInteger()); + return diff <= m_unit.getEpsilon(); + } + template double CPhysicalQuantity::valueRounded(int digits) const { diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index feb7b40d8..be4b1a5bf 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -107,6 +107,12 @@ namespace BlackMisc //! As integer value int valueInteger(MU unit) const; + //! As integer value in current unit + int valueInteger() const; + + //! Is value an integer + bool isInteger() const; + //! Rounded value in current unit //! \note default digits is CMeasurementUnit::getDisplayDigits double valueRounded(int digits = -1) const;