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
- Author:
- Peter Romianowski
-
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 0protected static final Map
TheClass
-object is key, the maximum-value is the valueprotected static final List
The "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 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
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:
-
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.
-
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.
-