freemarker.core
Class ArithmeticEngine.ConservativeEngine
java.lang.Object
freemarker.core.ArithmeticEngine
freemarker.core.ArithmeticEngine.ConservativeEngine
- Enclosing class:
- ArithmeticEngine
public static class ArithmeticEngine.ConservativeEngine
- extends ArithmeticEngine
An arithmetic engine that conservatively widens the operation arguments
to extent that they can hold the result of the operation. Widening
conversions occur in following situations:
- byte and short are always widened to int (alike to Java language).
- To preserve magnitude: when operands are of different types, the
result type is the type of the wider operand.
- to avoid overflows: if add, subtract, or multiply would overflow on
integer types, the result is widened from int to long, or from long to
BigInteger.
- to preserve fractional part: if a division of integer types would
have a fractional part, int and long are converted to double, and
BigInteger is converted to BigDecimal. An operation on a float and a
long results in a double. An operation on a float or double and a
BigInteger results in a BigDecimal.
Method Summary |
java.lang.Number |
add(java.lang.Number first,
java.lang.Number second)
|
int |
compareNumbers(java.lang.Number first,
java.lang.Number second)
|
java.lang.Number |
divide(java.lang.Number first,
java.lang.Number second)
|
java.lang.Number |
modulus(java.lang.Number first,
java.lang.Number second)
|
java.lang.Number |
multiply(java.lang.Number first,
java.lang.Number second)
|
java.lang.Number |
subtract(java.lang.Number first,
java.lang.Number second)
|
java.lang.Number |
toNumber(java.lang.String s)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
ArithmeticEngine.ConservativeEngine
public ArithmeticEngine.ConservativeEngine()
compareNumbers
public int compareNumbers(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
compareNumbers
in class ArithmeticEngine
- Throws:
TemplateException
add
public java.lang.Number add(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
add
in class ArithmeticEngine
- Throws:
TemplateException
subtract
public java.lang.Number subtract(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
subtract
in class ArithmeticEngine
- Throws:
TemplateException
multiply
public java.lang.Number multiply(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
multiply
in class ArithmeticEngine
- Throws:
TemplateException
divide
public java.lang.Number divide(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
divide
in class ArithmeticEngine
- Throws:
TemplateException
modulus
public java.lang.Number modulus(java.lang.Number first,
java.lang.Number second)
throws TemplateException
- Specified by:
modulus
in class ArithmeticEngine
- Throws:
TemplateException
toNumber
public java.lang.Number toNumber(java.lang.String s)
- Specified by:
toNumber
in class ArithmeticEngine