Class MathUtils


  • public abstract class MathUtils
    extends java.lang.Object
    Utility-class for all arithmetic-operations.

    All operations (+ - / *) return a Number which type is the type of the bigger argument.
    Example:
    add ( new Integer(10), new Integer(1)) will return an Integer-Object with the value 11
    add ( new Long(10), new Integer(1)) will return an Long-Object with the value 11
    add ( new Integer(10), new Float(1)) will return an Float-Object with the value 11

    Overflow checking:
    For integral values (byte, short, int) there is an implicit overflow correction (the next "bigger" type will be returned). For example, if you call add (new Integer (Integer.MAX_VALUE), 1) a Long-object will be returned with the correct value of Integer.MAX_VALUE+1.
    In addition to that the methods multiply,add and substract implement overflow checks for long-values. That means that if an overflow occurs while working with long values a BigInteger will be returned.
    For all other operations and types (such as Float and Double) there is no overflow checking.
    Since:
    1.5
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static int BASE_BIGDECIMAL  
      protected static int BASE_BIGINTEGER  
      protected static int BASE_DOUBLE  
      protected static int BASE_FLOAT  
      protected static int BASE_LONG
      The constants are used to determine in which context we have to calculate.
      protected static java.math.BigDecimal DECIMAL_ZERO
      A BigDecimal representing the number 0
      protected static java.util.Map ints
      The Class-object is key, the maximum-value is the value
      protected static java.util.List typesBySize
      The "size" of the number-types - ascending.
    • Constructor Summary

      Constructors 
      Constructor Description
      MathUtils()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.Number add​(java.lang.Number op1, java.lang.Number op2)
      Add two numbers and return the correct value / type.
      static int compare​(java.lang.Number op1, java.lang.Number op2)
      Compare two numbers.
      static java.lang.Number divide​(java.lang.Number op1, java.lang.Number op2)
      Divide two numbers.
      private static int findCalculationBase​(java.lang.Number op1, java.lang.Number op2)
      Find the common Number-type to be used in calculations.
      static boolean isInteger​(java.lang.Number n)
      Test, whether the given object is an integer value (Byte, Short, Integer, Long, BigInteger)
      static boolean isZero​(java.lang.Number n)
      Compare the given Number to 0.
      static java.lang.Number modulo​(java.lang.Number op1, java.lang.Number op2)
      Modulo two numbers.
      static java.lang.Number multiply​(java.lang.Number op1, java.lang.Number op2)
      Multiply two numbers and return the correct value / type.
      static java.lang.Number subtract​(java.lang.Number op1, java.lang.Number op2)
      Subtract two numbers and return the correct value / type.
      static java.math.BigDecimal toBigDecimal​(java.lang.Number n)
      Convert the given Number to a BigDecimal
      static java.math.BigInteger toBigInteger​(java.lang.Number n)
      Convert the given Number to a BigInteger
      static java.lang.Number wrapPrimitive​(long value, java.lang.Class type)
      Wrap the given primitive into the given class if the value is in the range of the destination type.
      private static java.lang.Number wrapPrimitive​(long value, java.lang.Number op1, java.lang.Number op2)
      Wrap the result in the object of the bigger type.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DECIMAL_ZERO

        protected static final java.math.BigDecimal DECIMAL_ZERO
        A BigDecimal representing the number 0
      • BASE_LONG

        protected static final int BASE_LONG
        The constants are used to determine in which context we have to calculate.
        See Also:
        Constant Field Values
      • ints

        protected static final java.util.Map ints
        The Class-object is key, the maximum-value is the value
      • typesBySize

        protected static final java.util.List typesBySize
        The "size" of the number-types - ascending.
    • Constructor Detail

      • MathUtils

        public MathUtils()
    • Method Detail

      • toBigDecimal

        public static java.math.BigDecimal toBigDecimal​(java.lang.Number n)
        Convert the given Number to a BigDecimal
        Parameters:
        n -
        Returns:
        The number as BigDecimal
      • toBigInteger

        public static java.math.BigInteger toBigInteger​(java.lang.Number n)
        Convert the given Number to a BigInteger
        Parameters:
        n -
        Returns:
        The number as BigInteger
      • isZero

        public static boolean isZero​(java.lang.Number n)
        Compare the given Number to 0.
        Parameters:
        n -
        Returns:
        True if number is 0.
      • isInteger

        public static boolean isInteger​(java.lang.Number n)
        Test, whether the given object is an integer value (Byte, Short, Integer, Long, BigInteger)
        Parameters:
        n -
        Returns:
        True if n is an integer.
      • wrapPrimitive

        public static java.lang.Number wrapPrimitive​(long value,
                                                     java.lang.Class type)
        Wrap the given primitive into the given class if the value is in the range of the destination type. If not the next bigger type will be chosen.
        Parameters:
        value -
        type -
        Returns:
        Number object representing the primitive.
      • wrapPrimitive

        private static java.lang.Number wrapPrimitive​(long value,
                                                      java.lang.Number op1,
                                                      java.lang.Number op2)
        Wrap the result in the object of the bigger type.
        Parameters:
        value - result of operation (as a long) - used to check size
        op1 - first operand of binary operation
        op2 - second operand of binary operation
        Returns:
        Number object of appropriate size to fit the value and operators
      • findCalculationBase

        private static int findCalculationBase​(java.lang.Number op1,
                                               java.lang.Number op2)
        Find the common Number-type to be used in calculations.
        Parameters:
        op1 - first operand of binary operation
        op2 - second operand of binary operation
        Returns:
        constant indicating type of Number to use in calculations
      • add

        public static java.lang.Number add​(java.lang.Number op1,
                                           java.lang.Number op2)
        Add two numbers and return the correct value / type. Overflow detection is done for integer values (byte, short, int, long) only!
        Parameters:
        op1 -
        op2 -
        Returns:
        Addition result.
      • subtract

        public static java.lang.Number subtract​(java.lang.Number op1,
                                                java.lang.Number op2)
        Subtract two numbers and return the correct value / type. Overflow detection is done for integer values (byte, short, int, long) only!
        Parameters:
        op1 -
        op2 -
        Returns:
        Subtraction result.
      • multiply

        public static java.lang.Number multiply​(java.lang.Number op1,
                                                java.lang.Number op2)
        Multiply two numbers and return the correct value / type. Overflow detection is done for integer values (byte, short, int, long) only!
        Parameters:
        op1 -
        op2 -
        Returns:
        Multiplication result.
      • divide

        public static java.lang.Number divide​(java.lang.Number op1,
                                              java.lang.Number op2)
        Divide two numbers. The result will be returned as Integer-type if and only if both sides of the division operator are Integer-types. Otherwise a Float, Double, or BigDecimal will be returned.
        Parameters:
        op1 -
        op2 -
        Returns:
        Division result.
      • modulo

        public static java.lang.Number modulo​(java.lang.Number op1,
                                              java.lang.Number op2)
                                       throws java.lang.ArithmeticException
        Modulo two numbers.
        Parameters:
        op1 -
        op2 -
        Returns:
        Modulo result.
        Throws:
        java.lang.ArithmeticException - If at least one parameter is a BigDecimal
      • compare

        public static int compare​(java.lang.Number op1,
                                  java.lang.Number op2)
        Compare two numbers.
        Parameters:
        op1 -
        op2 -
        Returns:
        1 if n1 > n2, -1 if n1 < n2 and 0 if equal.