Package freemarker.core
Class ArithmeticEngine
- java.lang.Object
-
- freemarker.core.ArithmeticEngine
-
- Direct Known Subclasses:
ArithmeticEngine.BigDecimalEngine
,ArithmeticEngine.ConservativeEngine
public abstract class ArithmeticEngine extends java.lang.Object
Used for implementing the arithmetic operations and number comparisons in the template language. The concrete implementation is plugged into the configuration with thearithmetical_engine
setting. (SeeConfigurable.setArithmeticEngine(ArithmeticEngine)
.)
-
-
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, and also keeps the result as aBigDecimal
.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 java.lang.Number
add(java.lang.Number first, java.lang.Number second)
abstract int
compareNumbers(java.lang.Number first, java.lang.Number second)
abstract java.lang.Number
divide(java.lang.Number first, java.lang.Number second)
abstract java.lang.Number
modulus(java.lang.Number first, java.lang.Number second)
abstract java.lang.Number
multiply(java.lang.Number first, java.lang.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 java.lang.Number
subtract(java.lang.Number first, java.lang.Number second)
abstract java.lang.Number
toNumber(java.lang.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, and also keeps the result as aBigDecimal
. 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(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
add
public abstract java.lang.Number add(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
subtract
public abstract java.lang.Number subtract(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
multiply
public abstract java.lang.Number multiply(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
divide
public abstract java.lang.Number divide(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
modulus
public abstract java.lang.Number modulus(java.lang.Number first, java.lang.Number second) throws TemplateException
- Throws:
TemplateException
-
toNumber
public abstract java.lang.Number toNumber(java.lang.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)
-
-