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.