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(ListThe software is licensed under the MIT Open Source license (see LICENSE file).parameters) { BigDecimal sum = parameters.get(0).add(parameters.get(1)).add(parameters.get(2)); return sum.divide(new BigDecimal(3)); } }); e.eval(); // returns 16
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)
public 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–2019 The Apache Software Foundation. All rights reserved.