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 ( Integer.valueOf(10), Integer.valueOf(1))
will return an Integer
-Object with the value 11add ( Long.valueOf(10), Integer.valueOf(1))
will return an Long
-Object with the value 11add ( Integer.valueOf(10), Float.valueOf(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 (Integer.valueOf(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
- Author:
- Peter Romianowski
-
Field Summary
Modifier 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 0 -
Constructor Summary
-
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 numberstatic 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.
-
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:
-
-
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.
-
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)
-