public class Expression extends Object
BigDecimal result = null;
Expression expression = new Expression("1+1/3");
result = expression.eval():
expression.setPrecision(2);
result = expression.eval():
result = new Expression("(3.4 + -4.1)/2").eval();
result = new Expression("SQRT(a^2 + b^2").with("a","2.4").and("b","9.253").eval();
BigDecimal a = new BigDecimal("2.4");
BigDecimal b = new BigDecimal("9.235");
result = new Expression("SQRT(a^2 + b^2").with("a",a).and("b",b).eval();
result = new Expression("2.4/PI").setPrecision(128).setRoundingMode(RoundingMode.UP).eval();
result = new Expression("random() > 0.5").eval();
result = new Expression("not(x < 7 || sqrt(max(x,9)) <= 3))").with("x","22.9").eval();
| Mathematical Operators | |
|---|---|
| Operator | Description |
| + | Additive operator |
| - | Subtraction operator |
| * | Multiplication operator |
| / | Division operator |
| % | Remainder operator (Modulo) |
| ^ | Power operator |
| Boolean Operators* | |
|---|---|
| Operator | Description |
| = | Equals |
| == | Equals |
| != | Not equals |
| <> | Not equals |
| < | Less than |
| <= | Less than or equal to |
| > | Greater than |
| >= | Greater than or equal to |
| && | Boolean and |
| || | Boolean or |
| Function* | Description |
|---|---|
| NOT(expression) | Boolean negation, 1 (means true) if the expression is not zero |
| IF(condition,value_if_true,value_if_false) | Returns one value if the condition evaluates to true or the other if it evaluates to false |
| RANDOM() | Produces a random number between 0 and 1 |
| MIN(e1,e2) | Returns the smaller of both expressions |
| MAX(e1,e2) | Returns the bigger of both expressions |
| ABS(expression) | Returns the absolute (non-negative) value of the expression |
| ROUND(expression,precision) | Rounds a value to a certain number of digits, uses the current rounding mode |
| FLOOR(expression) | Rounds the value down to the nearest integer |
| CEILING(expression) | Rounds the value up to the nearest integer |
| LOG(expression) | Returns the natural logarithm (base e) of an expression |
| SQRT(expression) | Returns the square root of an expression |
| SIN(expression) | Returns the trigonometric sine of an angle (in degrees) |
| COS(expression) | Returns the trigonometric cosine of an angle (in degrees) |
| TAN(expression) | Returns the trigonometric tangens of an angle (in degrees) |
| SINH(expression) | Returns the hyperbolic sine of a value |
| COSH(expression) | Returns the hyperbolic cosine of a value |
| TANH(expression) | Returns the hyperbolic tangens of a value |
| RAD(expression) | Converts an angle measured in degrees to an approximately equivalent angle measured in radians |
| DEG(expression) | Converts an angle measured in radians to an approximately equivalent angle measured in degrees |
| Constant | Description |
|---|---|
| PI | The value of PI, exact to 100 digits |
| TRUE | The value one |
| FALSE | The value zero |
Expression e = new Expression("2.1234 >> 2");
e.addOperator(e.new Operator(">>", 30, true) {
@Override
public BigDecimal eval(BigDecimal v1, BigDecimal v2) {
return v1.movePointRight(v2.toBigInteger().intValue());
}
});
e.eval(); // returns 212.34
Expression e = new Expression("2 * average(12,4,8)");
e.addFunction(e.new Function("average", 3) {
@Override
public BigDecimal eval(List<BigDecimal> parameters) {
BigDecimal sum = parameters.get(0).add(parameters.get(1)).add(parameters.get(2));
return sum.divide(new BigDecimal(3));
}
});
e.eval(); // returns 16
The software is licensed under the MIT Open Source license (see LICENSE file).
| Modifier and Type | Class and Description |
|---|---|
class |
Expression.Assignment
Marker class for assignment operators.
|
class |
Expression.Comma |
class |
Expression.Comparator |
class |
Expression.Constant |
class |
Expression.ExpressionException
The expression evaluators exception class.
|
class |
Expression.Function
Abstract definition of a supported expression function.
|
class |
Expression.LeftParen |
class |
Expression.Operator
Abstract definition of a supported operator.
|
class |
Expression.Variable |
| Modifier and Type | Field and Description |
|---|---|
static BigDecimal |
PI
Definition of PI as a constant, can be used in expressions as variable.
|
| Constructor and Description |
|---|
Expression(String expression)
Creates a new expression instance from an expression string.
|
| Modifier and Type | Method and Description |
|---|---|
Expression |
addConstant(String name,
Object value)
Sets a constant value.
|
Expression.Function |
addFunction(Expression.Function function)
Adds a function to the list of supported functions
|
Expression.Operator |
addOperator(Expression.Operator operator)
Adds an operator to the list of supported operators.
|
Object |
eval()
Evaluates the expression.
|
Object |
eval(Map<String,Object> variables)
Evaluates the expression.
|
Iterator<String> |
getExpressionTokenizer()
Get an iterator for this expression, allows iterating over an expression
token by token.
|
Expression |
setPrecision(int precision)
Sets the precision for expression evaluation.
|
Expression |
setRoundingMode(RoundingMode roundingMode)
Sets the rounding mode for expression evaluation.
|
String |
toRPN()
Get a string representation of the RPN (Reverse Polish Notation) for this
expression.
|
public static final BigDecimal PI
public Expression(String expression)
expression - The expression. E.g. "2.4*sin(3)/(2-4)" or
"sin(y)>0 & max(z, 3)>3"public Object eval()
public Object eval(Map<String,Object> variables)
variables - the variablespublic Expression setPrecision(int precision)
precision - The new precision.public Expression setRoundingMode(RoundingMode roundingMode)
roundingMode - The new rounding mode.public Expression.Operator addOperator(Expression.Operator operator)
operator - The operator to add.null if
there was none.public Expression.Function addFunction(Expression.Function function)
function - The function to add.null if
there was none.public Expression addConstant(String name, Object value)
name - The constant name.value - The constant value.public Iterator<String> getExpressionTokenizer()
public String toRPN()
Copyright © 2006–2022 The Apache Software Foundation. All rights reserved.