Class MathUtils
java.lang.Object
org.apache.velocity.runtime.parser.node.MathUtils
Utility-class for all arithmetic-operations.
All operations (+ - / *) return a Number which type is the type of the bigger argument.
Example:
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
In addition to that the methods
For all other operations and types (such as Float and Double) there is no overflow checking.
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 11add ( new Long(10), new Integer(1))
will return an Long
-Object with the value 11add ( new Integer(10), new Float(1))
will return an Float
-Object with the value 11Overflow 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
FieldsModifier and TypeFieldDescriptionprotected static final int
protected static final int
protected static final int
protected static final int
protected static final int
The constants are used to determine in which context we have to calculate.protected static final BigDecimal
A BigDecimal representing the number 0private static final Map
<Class<? extends Number>, BigDecimal> TheClass
-object is key, the maximum-value is the valueThe "size" of the number-types - ascending. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Number
Add two numbers and return the correct value / type.static int
Compare two numbers.static Number
Divide two numbers.static int
Find the Number-type to be used for a single numberprivate static int
findCalculationBase
(Number op1, Number op2) Find the common Number-type to be used in calculations.static boolean
Test, whether the given object is an integer value (Byte, Short, Integer, Long, BigInteger)static boolean
Compare the given Number to 0.static Number
Modulo two numbers.static Number
Multiply two numbers and return the correct value / type.static Number
Negate a numberstatic Number
Subtract two numbers and return the correct value / type.static BigDecimal
Convert the given Number to a BigDecimalstatic BigInteger
Convert the given Number to a BigIntegerstatic Number
wrapPrimitive
(long value, Class<?> type) Wrap the given primitive into the given class if the value is in the range of the destination type.private static Number
wrapPrimitive
(long value, Number op1, Number op2) Wrap the result in the object of the bigger type.
-
Field Details
-
DECIMAL_ZERO
A BigDecimal representing the number 0 -
BASE_LONG
protected static final int BASE_LONGThe constants are used to determine in which context we have to calculate.- See Also:
-
BASE_FLOAT
protected static final int BASE_FLOAT- See Also:
-
BASE_DOUBLE
protected static final int BASE_DOUBLE- See Also:
-
BASE_BIGINTEGER
protected static final int BASE_BIGINTEGER- See Also:
-
BASE_BIGDECIMAL
protected static final int BASE_BIGDECIMAL- See Also:
-
ints
TheClass
-object is key, the maximum-value is the value -
typesBySize
The "size" of the number-types - ascending.
-
-
Constructor Details
-
MathUtils
public MathUtils()
-
-
Method Details
-
toBigDecimal
Convert the given Number to a BigDecimal- Parameters:
n
-- Returns:
- The number as BigDecimal
-
toBigInteger
Convert the given Number to a BigInteger- Parameters:
n
-- Returns:
- The number as BigInteger
-
isZero
Compare the given Number to 0.- Parameters:
n
-- Returns:
- True if number is 0.
-
isInteger
Test, whether the given object is an integer value (Byte, Short, Integer, Long, BigInteger)- Parameters:
n
-- Returns:
- True if n is an integer.
-
wrapPrimitive
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
Wrap the result in the object of the bigger type.- Parameters:
value
- result of operation (as a long) - used to check sizeop1
- first operand of binary operationop2
- second operand of binary operation- Returns:
- Number object of appropriate size to fit the value and operators
-
findCalculationBase
Find the common Number-type to be used in calculations.- Parameters:
op1
- first operand of binary operationop2
- second operand of binary operation- Returns:
- constant indicating type of Number to use in calculations
-
findCalculationBase
Find the Number-type to be used for a single number- Parameters:
op
- operand- Returns:
- constant indicating type of Number to use in calculations
-
add
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
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
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
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
Modulo two numbers.- Parameters:
op1
-op2
-- Returns:
- Modulo result.
- Throws:
ArithmeticException
- If at least one parameter is a BigDecimal
-
compare
Compare two numbers.- Parameters:
op1
-op2
-- Returns:
- 1 if n1 > n2, -1 if n1 < n2 and 0 if equal.
-
negate
Negate a number- Parameters:
op
- n- Returns:
- -n (unary negation of n)
-