Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dei79/expressionevaluationruntime
ExpressionEvaluationRuntime is a mathematical expressions evaluator library written in C# derived from the MathEval project. Allows to evaluate mathematical, boolean, string and datetime expressions. Code is written in pure C#, run on the fly.
https://github.com/dei79/expressionevaluationruntime
Last synced: about 1 month ago
JSON representation
ExpressionEvaluationRuntime is a mathematical expressions evaluator library written in C# derived from the MathEval project. Allows to evaluate mathematical, boolean, string and datetime expressions. Code is written in pure C#, run on the fly.
- Host: GitHub
- URL: https://github.com/dei79/expressionevaluationruntime
- Owner: dei79
- License: mit
- Created: 2024-05-31T18:56:00.000Z (8 months ago)
- Default Branch: master
- Last Pushed: 2024-05-31T21:43:37.000Z (8 months ago)
- Last Synced: 2024-12-13T18:42:01.745Z (about 1 month ago)
- Language: C#
- Homepage:
- Size: 97.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# About ExpressionEvaluationRuntime
ExpressionEvaluationRuntime is a mathematical expressions evaluator library written in C# derived from the MathEval project. Allows to evaluate mathematical, boolean,
string and datetime expressions. Code is written in pure C#, run on the fly. We don't use any third party libraries or packages. If you get any bugs please let
me know by creating a new issue.**Many thanks to our contributors:**
[Thanhrin](https://github.com/ThanhRin) (from Da Nang, VietNam)
[Eduardo Salinas](https://github.com/butulia) (from Huesca, Spain)
[MathEval](https://github.com/matheval) (from Matheval)# Installation
Using Package Manager```bash
PM> Install-Package ExpressionEvaluationRuntime
```
# Official document
The libary supports all what is supported in the origibal MathEval library documented here: [https://matheval.org/math-expression-eval-for-c-sharp/](https://matheval.org/math-expression-eval-for-c-sharp/)# Supported operators, contants, functions
## Supported Operators
Operator
Description
+
Additive operator / Unary plus / Concatenate string / Datetime addition
&
Concatenate string
–
Subtraction operator / Unary minus / Datetime subtraction
*
Multiplication operator, can be omitted in front of an open bracket
/
Division operator
%
Remainder operator (Modulo)
^
Power operator
## Supported conditional statements
Conditional statement
Description
IF(logical_condition, value_if_true, value_if_false)
Example:
`IF(2>1,"Pass","Fail")`SWITCH(expression, val1,result1, [val2,result2], …, [default])
Example:
`SWITCH(3+2,5,"Apple",7,"Mango",3,"Good","N/A")`## Supported logical and math functions
Function*
Description
AND(logical1, [logical2], …)
Determine if all conditions are TRUE
OR(logical1, [logical2], …)
Determine if any conditions in a test are TRUE
NOT(_logical_)
To confirm one value is not equal to another
XOR(logical1, [logical2], …)
Exclusive OR function
SUM(number1, [number2],…)
Return sum of numbers supplied
AVERAGE(number1, [number2],…)
Return average of numbers supplied
MIN(number1, [number2],…)
Return the smallest value from the numbers supplied
MAX(number1, [number2],…)
Return the biggest value from the numbers supplied
MOD(number, divisor)
Get remainder of two given numbers after division operator.
ROUND(number, num_digits)
Returns the rounded approximation of given number using half-even rounding mode
( you can change to another rounding mode)FLOOR(number, significance)
Rounds a given number towards zero to the nearest multiple of a specified significance
`CEILING`(number, significance)
Rounds a given number away from zero, to the nearest multiple of a given number
POWER(number, power)
Returns the result of a number raised to a given power
RAND()
Produces a random number between 0 and 1
SIN(number)
Returns the trigonometric sine of the angle given in radians
SINH(number)
Returns the hyperbolic sine of a number
ASIN(number)
Returns the arc sine of an angle, in the range of -pi/2 through pi/2
COS(number)
Returns the trigonometric cos of the angle given in radians
COSH(number)
Returns the hyperbolic cos of a number
ACOS(number)
Returns the arc cosine of an angle, in the range of 0.0 through pi
TAN(number)
Returns the tangent of the angle given in radians
TANH(number)
Returns the hyperbolic tangent of a number
ATAN(number)
Returns the arc tangent of an angle given in radians
ATAN2(x_number, y_number)
Returns the arctangent from x- and y-coordinates
COT(number)
Returns the cotangent of an angle given in radians.
COTH(number)
Returns the hyperbolic cotangent of a number
SQRT(number)
Returns the correctly rounded positive square root of given number
LN(number)
Returns the natural logarithm (base _e_) of given number
LOG10(number)
Returns the logarithm (base 10) of given number
EXP(number)
Returns e raised to the power of given number
ABS(number)
Returns the absolute value of given number
FACT(number)
Returns the factorial of a given number
SEC(number)
Returns the secant of an angle given in radians
CSC(number)
Returns the cosecant of an angle given in radians
PI()
Return value of Pi
RADIANS(degrees)
Convert degrees to radians
DEGREES(radians)
Convert radians to degrees
INT(number)
Returns the Integer value of given number
## Supported Constants
Constant
Description
e
The value of _e_
PI
The value of _PI_
TRUE
The boolean true value
FALSE
The boolean false value
NULL
The null value
## Supported text functions
Function
Description
LEFT(text, num_chars)
Extracts a given number of characters from the left side of a supplied text string
RIGHT(text, num_chars)
Extracts a given number of characters from the right side of a supplied text string
MID(text, start_num, num_chars)
Extracts a given number of characters from the middle of a supplied text string
REVERSE(text)
Reverse a string
ISNUMBER(text)
Check if a value is a number
LOWER(text)
Converts all letters in the specified string to lowercase
UPPER(text)
Converts all letters in the specified string to uppercase
PROPER(text)
Capitalizes words given text string
TRIM(text)
Removes extra spaces from text
LEN(text)
Returns the length of a string/ text
TEXT(value, [format_text])
Convert a numeric value into a text string. You can use the TEXT function to embed formatted numbers inside text
Example:
`TEXT(123) -> 123`TEXT(123) -> 123`
TEXT(DATEVALUE("2021-01-23"),"dd-MM-yyyy") -> 23-01-2021`TEXT(DATEVALUE("2021-01-23"),"dd-MM-yyyy") -> 23-01-2021`
TEXT(2.61,"hh:mm") -> 14:38`TEXT(2.61,"hh:mm") -> 14:38`
TEXT(2.61,"[hh]") -> 62`TEXT(2.61,"[hh]") -> 62`
TEXT(2.61,"hh-mm-ss") -> 14-38-24`TEXT(2.61,"hh-mm-ss") -> 14-38-24`
TEXT(DATEVALUE("2021-01-03")-DATEVALUE("2021-01-01"),"[h]") -> 48`TEXT(DATEVALUE("2021-01-03")-DATEVALUE("2021-01-01"),"[h]") -> 48`
TEXT(TIME(12,00,00)-TIME(10,30,10),"hh hours and mm minutes and ss seconds") -> "01 hours and 29 minutes and 50 seconds"`TEXT(TIME(12,00,00)-TIME(10,30,10),"hh hours and mm minutes and ss seconds") -> "01 hours and 29 minutes and 50 seconds"``
REPLACE(old_text, start_num, num_chars, new_text)
Replaces characters specified by location in a given text string with another text string
SUBSTITUTE(text, old_text, new_text)
Replaces a set of characters with another
FIND(find_text, within_text, [start_num])
Returns the location of a substring in a string (case sensitive)
SEARCH(find_text, within_text, [start_num])
Returns the location of a substring in a string (case insensitive)
CONCAT(text1, text2, text3,…)
Combines the text from multiple strings
ISBLANK(text)
Returns TRUE when a given string is null or empty, otherwise return FALSE
REPT(text, repeat_time)
Repeats characters a given number of times
CHAR(char_code)
Return character from ascii code
CODE(char)
Returns a ascii code of a character
VALUE(text)
Convert numbers stored as text to numbers
# Usage examples
## Basic evaluator
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expression = new Expression("(a + b) / 2 ");
expression.Bind("a", 3);
expression.Bind("b",5);
Object value = expression.Eval();
Console.WriteLine("Result: "+value); //Result: 4
}
}
```## Conditional statements
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expression = new Expression("IF(time>8, (HOUR_SALARY*8) + (HOUR_SALARY*1.25*(time-8)), HOUR_SALARY*time)");
//bind variable
expression.Bind("HOUR_SALARY", 10);
expression.Bind("time", 9);
//eval
Decimal salary = expression.Eval();
Console.WriteLine(salary); //return 92.5
}
}
```## Validate expression
```cs
Expression expression = new Expression("SUM(1,2,3) + true");
List errors = expression.GetError();
if(errors.Count > 0)
{
foreach(String error in errors)
{
Console.WriteLine(error);
}
}
```## Min, max, sum, avg
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expr = new Expression("MIN(2,3,16)");
int min = expr.Eval();
Console.WriteLine(min);// return 2 (min)
expr.SetFomular("Max(2,3,16)");
int max = expr.Eval();
Console.WriteLine(max);// return 16 (max)
expr.SetFomular("Sum(2,3,16)");
decimal sum = expr.Eval();
Console.WriteLine(sum);// return 21 (sum)
expr.SetFomular("average(2,3,16)");
decimal average = expr.Eval();
Console.WriteLine(average);// return 7 (average)
}
}
```
## Round, floor, ceiling
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expr = new Expression("ROUND(2.149, 1)");
Object value = expr.Eval();
Console.WriteLine("ROUND(2.149, 1) = "+value); //return 2.1
expr = new Expression("FLOOR(2.149)");
value = expr.Eval();
Console.WriteLine("FLOOR(2.149) = "+value); //return 2
expr = new Expression("FLOOR(3.7,2)");
value = expr.Eval();
Console.WriteLine("FLOOR(3.7,2) = "+value); //return 2
expr = new Expression("CEILING(2.149)");
value = expr.Eval();
Console.WriteLine("CEILING(2.149) = "+value); //return 3
expr = new Expression("CEILING(1.5, 0.1)");
value = expr.Eval();
Console.WriteLine("CEILING(1.5, 0.1) = "+value); //return 1.5
}
}
```
## Trigonometry
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expr = new Expression("tan(a)^3-((3*sin(a)-sin(3*a))/(3*cos(a)+cos(3*a)))");
Decimal value = expr.Bind("a", Math.PI/6).Eval();
Console.WriteLine(value); //return 0
}
}
```## Deal with string
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression taxExpr = new Expression("IF(LOWER(TAX_CODE)='vat',amount*10/100,IF(LOWER(TAX_CODE)='gst',amount*15/100,0))");
taxExpr.Bind("TAX_CODE","GST");
taxExpr.Bind("amount", 5005m);
Decimal value = taxExpr.Eval();
Console.WriteLine(value);
}
}
```
## Concatenate strings
```cs
using System;
using ExpressionEvaluation.Runtime;
public class Program
{
public static void Main()
{
Expression expr = new Expression("CONCAT('The United States of ', 'America')");
String value = expr.Eval();
Console.WriteLine(value);//The United States of America
}
}
```## License
MIT license