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 smallest of the given expressions |
| MAX(e1,e2, ...) | Returns the biggest of the given 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 |
| LOG10(expression) | Returns the common logarithm (base 10) 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) |
| ASIN(expression) | Returns the angle of asin (in degrees) |
| ACOS(expression) | Returns the angle of acos (in degrees) |
| ATAN(expression) | Returns the angle of atan (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 |
|---|---|
| e | The value of e, exact to 70 digits |
| 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
-1 as the number of parameters denotes a variable number of arguments.
Expression e = new Expression("2 * average(12,4,8)");
e.addFunction(e.new Function("average", 3) {
@Override
public BigDecimal eval(List 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 |
|---|---|
static class |
Expression.ExpressionException
The expression evaluators exception class.
|
class |
Expression.Function
Abstract definition of a supported expression function.
|
class |
Expression.LazyFunction |
class |
Expression.Operator
Abstract definition of a supported operator.
|
| Modifier and Type | Field and Description |
|---|---|
static BigDecimal |
e
Definition of e: "Euler's number" as a constant, can be used in expressions as variable.
|
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 with a given
default match context of
MathContext.DECIMAL32. |
Expression(String expression,
MathContext defaultMathContext)
Creates a new expression instance from an expression string with a given
default match context.
|
| Modifier and Type | Method and Description |
|---|---|
Expression.Function |
addFunction(Expression.Function function)
Adds a function to the list of supported functions
|
Expression.LazyFunction |
addLazyFunction(Expression.LazyFunction function)
Adds a lazy function function to the list of supported functions
|
Expression.Operator |
addOperator(Expression.Operator operator)
Adds an operator to the list of supported operators.
|
Expression |
and(String variable,
BigDecimal value)
Sets a variable value.
|
Expression |
and(String variable,
String value)
Sets a variable value.
|
BigDecimal |
eval()
Evaluates the expression.
|
Set<String> |
getDeclaredFunctions()
Exposing declared functions.
|
Set<String> |
getDeclaredOperators()
Exposing declared operators in the expression.
|
Set<String> |
getDeclaredVariables()
Exposing declared variables in the expression.
|
String |
getExpression() |
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.
|
Expression |
setVariable(String variable,
BigDecimal value)
Sets a variable value.
|
Expression |
setVariable(String variable,
String value)
Sets a variable value.
|
String |
toRPN()
Get a string representation of the RPN (Reverse Polish Notation) for this
expression.
|
Expression |
with(String variable,
BigDecimal value)
Sets a variable value.
|
Expression |
with(String variable,
String value)
Sets a variable value.
|
public static final BigDecimal PI
public static final BigDecimal e
public Expression(String expression)
MathContext.DECIMAL32.expression - The expression. E.g. "2.4*sin(3)/(2-4)" or
"sin(y)>0 & max(z, 3)>3"public Expression(String expression, MathContext defaultMathContext)
expression - The expression. E.g. "2.4*sin(3)/(2-4)" or
"sin(y)>0 & max(z, 3)>3"defaultMathContext - The MathContext to use by default.public BigDecimal eval()
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.LazyFunction addLazyFunction(Expression.LazyFunction function)
function - The function to add.null if
there was none.public Expression setVariable(String variable, BigDecimal value)
variable - The variable name.value - The variable value.public Expression setVariable(String variable, String value)
variable - The variable to set.value - The variable value.public Expression with(String variable, BigDecimal value)
variable - The variable to set.value - The variable value.public Expression and(String variable, String value)
variable - The variable to set.value - The variable value.public Expression and(String variable, BigDecimal value)
variable - The variable to set.value - The variable value.public Expression with(String variable, String value)
variable - The variable to set.value - The variable value.public Iterator<String> getExpressionTokenizer()
public String toRPN()
public Set<String> getDeclaredVariables()
public Set<String> getDeclaredOperators()
public Set<String> getDeclaredFunctions()
public String getExpression()
Copyright © 2016 Udo Klimaschewski. All rights reserved.