Package freemarker.core
Class ArithmeticEngine
- java.lang.Object
-
- freemarker.core.ArithmeticEngine
-
- Direct Known Subclasses:
ArithmeticEngine.BigDecimalEngine
,ArithmeticEngine.ConservativeEngine
public abstract class ArithmeticEngine extends Object
Class to perform arithmetic operations.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ArithmeticEngine.BigDecimalEngine
This is the default arithmetic engine in FreeMarker.static class
ArithmeticEngine.ConservativeEngine
An arithmetic engine that conservatively widens the operation arguments to extent that they can hold the result of the operation.
-
Field Summary
Fields Modifier and Type Field Description static ArithmeticEngine.BigDecimalEngine
BIGDECIMAL_ENGINE
Arithmetic engine that converts all numbers toBigDecimal
and then operates on them.static ArithmeticEngine.ConservativeEngine
CONSERVATIVE_ENGINE
Arithmetic engine that uses (more-or-less) the widening conversions of Java language to determine the type of result of operation, instead of converting everything to BigDecimal up front.protected int
maxScale
protected int
minScale
protected int
roundingPolicy
-
Constructor Summary
Constructors Constructor Description ArithmeticEngine()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract Number
add(Number first, Number second)
abstract int
compareNumbers(Number first, Number second)
abstract Number
divide(Number first, Number second)
abstract Number
modulus(Number first, Number second)
abstract Number
multiply(Number first, Number second)
void
setMaxScale(int maxScale)
Sets the maximal scale to use when multiplying BigDecimal numbers.void
setMinScale(int minScale)
Sets the minimal scale to use when dividing BigDecimal numbers.void
setRoundingPolicy(int roundingPolicy)
abstract Number
subtract(Number first, Number second)
abstract Number
toNumber(String s)
Should be able to parse all FTL numerical literals, Java Double toString results, and XML Schema numbers.
-
-
-
Field Detail
-
BIGDECIMAL_ENGINE
public static final ArithmeticEngine.BigDecimalEngine BIGDECIMAL_ENGINE
Arithmetic engine that converts all numbers toBigDecimal
and then operates on them. This is FreeMarker's default arithmetic engine.
-
CONSERVATIVE_ENGINE
public static final ArithmeticEngine.ConservativeEngine CONSERVATIVE_ENGINE
Arithmetic engine that uses (more-or-less) the widening conversions of Java language to determine the type of result of operation, instead of converting everything to BigDecimal up front.
-
minScale
protected int minScale
-
maxScale
protected int maxScale
-
roundingPolicy
protected int roundingPolicy
-
-
Method Detail
-
compareNumbers
public abstract int compareNumbers(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
add
public abstract Number add(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
subtract
public abstract Number subtract(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
multiply
public abstract Number multiply(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
divide
public abstract Number divide(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
modulus
public abstract Number modulus(Number first, Number second) throws TemplateException
- Throws:
TemplateException
-
toNumber
public abstract Number toNumber(String s)
Should be able to parse all FTL numerical literals, Java Double toString results, and XML Schema numbers. This means these should be parsed successfully, except if the arithmetical engine couldn't support the resulting value anyway (such as NaN, infinite, even non-integers):-123.45
,1.5e3
,1.5E3
,0005
,+0
,-0
,NaN
,INF
,-INF
,Infinity
,-Infinity
.
-
setMinScale
public void setMinScale(int minScale)
Sets the minimal scale to use when dividing BigDecimal numbers. Default value is 12.
-
setMaxScale
public void setMaxScale(int maxScale)
Sets the maximal scale to use when multiplying BigDecimal numbers. Default value is 100.
-
setRoundingPolicy
public void setRoundingPolicy(int roundingPolicy)
-
-