Class DecimalQuantity<Q extends javax.measure.Quantity<Q>>

  • Type Parameters:
    Q - The type of the quantity.
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable<javax.measure.Quantity<Q>>, javax.measure.Quantity<Q>, ComparableQuantity<Q>, tech.uom.lib.common.function.QuantityConverter<Q>, tech.uom.lib.common.function.UnitSupplier<Q>, tech.uom.lib.common.function.ValueSupplier<java.lang.Number>

    final class DecimalQuantity<Q extends javax.measure.Quantity<Q>>
    extends AbstractQuantity<Q>
    implements java.io.Serializable
    An amount of quantity, implementation of ComparableQuantity that uses BigDecimal as implementation of Number, this object is immutable. Note: all operations which involves Number, this implementation will convert to BigDecimal, and all operation of BigDecimal will use MathContext.DECIMAL128.
    Since:
    1.0
    Version:
    1.0.2
    See Also:
    AbstractQuantity, Quantity, ComparableQuantity
    • Field Detail

      • value

        private final java.math.BigDecimal value
    • Constructor Detail

      • DecimalQuantity

        public DecimalQuantity​(java.math.BigDecimal value,
                               javax.measure.Unit<Q> unit)
      • DecimalQuantity

        public DecimalQuantity​(double value,
                               javax.measure.Unit<Q> unit)
    • Method Detail

      • getValue

        public java.math.BigDecimal getValue()
        Description copied from class: AbstractQuantity
        Returns the numeric value of the quantity.
        Specified by:
        getValue in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        getValue in interface tech.uom.lib.common.function.ValueSupplier<Q extends javax.measure.Quantity<Q>>
        Specified by:
        getValue in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
        Returns:
        the quantity value.
      • doubleValue

        public double doubleValue​(javax.measure.Unit<Q> unit)
        Specified by:
        doubleValue in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
      • decimalValue

        public java.math.BigDecimal decimalValue​(javax.measure.Unit<Q> unit)
                                          throws java.lang.ArithmeticException
        Specified by:
        decimalValue in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
        Throws:
        java.lang.ArithmeticException
      • add

        public ComparableQuantity<Q> add​(javax.measure.Quantity<Q> that)
        Specified by:
        add in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        add in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.add(Quantity)
      • subtract

        public ComparableQuantity<Q> subtract​(javax.measure.Quantity<Q> that)
        Specified by:
        subtract in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        subtract in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.subtract(Quantity)
      • multiply

        public ComparableQuantity<?> multiply​(javax.measure.Quantity<?> that)
        Specified by:
        multiply in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        multiply in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.multiply(Quantity)
      • multiply

        public ComparableQuantity<Q> multiply​(java.lang.Number that)
        Specified by:
        multiply in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        multiply in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.multiply(Number)
      • divide

        public ComparableQuantity<Q> divide​(java.lang.Number that)
        Specified by:
        divide in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        divide in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.divide(Number)
      • inverse

        public ComparableQuantity<Q> inverse()
        Specified by:
        inverse in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        inverse in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.inverse()
      • longValue

        protected long longValue​(javax.measure.Unit<Q> unit)
        Overrides:
        longValue in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
      • isBig

        public boolean isBig()
        Specified by:
        isBig in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
      • divide

        public ComparableQuantity<?> divide​(javax.measure.Quantity<?> that)
        Specified by:
        divide in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
        Specified by:
        divide in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
        See Also:
        Quantity.divide(Quantity)
      • equals

        public boolean equals​(java.lang.Object obj)
        Description copied from class: AbstractQuantity
        Compares this quantity against the specified object for strict equality (same unit and same amount).

        Similarly to the BigDecimal.equals(java.lang.Object) method which consider 2.0 and 2.00 as different objects because of different internal scales, quantities such as Quantities.getQuantity(3.0, KILOGRAM) Quantities.getQuantity(3, KILOGRAM) and Quantities.getQuantity("3 kg") might not be considered equals because of possible differences in their implementations.

        To compare quantities stated using different units or using different amount implementations the compareTo or equals(Quantity, epsilon, epsilonUnit) methods should be used.

        Overrides:
        equals in class AbstractQuantity<Q extends javax.measure.Quantity<Q>>
        Parameters:
        obj - the object to compare with.
        Returns:
        this.getUnit.equals(obj.getUnit()) && this.getValue().equals(obj.getValue())