Math Parser .NET C#






4.78/5 (39投票s)
这是一个轻量级、快速且易于理解的数学解析器,它在一个类中设计,接收数学表达式(System.String)作为输入,并返回输出值 (System.Double)。
简介
这是一个**轻量级、快速且易于理解的**数学解析器,在一个**类**中设计,接收数学表达式 (System.String) 作为输入,并返回输出值 (System.Double)。例如,如果您的输入字符串是 "√(625)+25*(3/3)",则解析器返回双精度值 — 50。
背景
其设计理念是为教育目的创建一个字符串计算器。
工作原理
更多信息请查看代码,我尝试在注释中解释解析器的工作原理以及如何更改和扩展它。
转换为逆波兰表达式 (RPN)
* 输入运算符被替换为相应的标记(需要区分一元运算符和二元运算符)。
使用代码
示例:
public static void Main()
{
MathParser parser = new MathParser();
string s1 = "pi+5*5+5*3-5*5-5*3+1E1";
string s2 = "sin(cos(tg(sh(ch(th(100))))))";
bool isRadians = false;
double d1 = parser.Parse(s1, isRadians);
double d2 = parser.Parse(s2, isRadians);
Console.WriteLine(d1); // 13.141592...
Console.WriteLine(d2); // 0.0174524023974442
Console.ReadKey(true);
}
功能
算术运算符:
- () — 括号;
- + — 加法 (a + b);
- - — 减法 (a - b);
- * — 乘法 (a * b);
- / — 除法 (a / b);
- ^ — 幂 (a ^ b);
函数:
三角函数:
- sin(x);
- cos(x);
- tan(x);
- cot(x);
双曲函数
- sinh(x);
- cosh(x);
- tanh(x);
其他函数:
- √(a), sqrt(a) — 平方根;
- exp(x) — 指数函数 (或使用 e^x);
- (a)log(b) — 对数;
- ln(x) — 自然对数;
- abs(x) — 绝对值;
常量:
- pi — 3.14159265...;
- e — 2.71828183....;
三角函数的参数可以表示为弧度 (true) 或角度 (false),方法是向解析方法发送相应的布尔值。例如(以弧度为单位):
parser.Parse("sin(90)", true);
支持任何字符作为实数的小数分隔符(根据区域设置)。
可以轻松地向代码中添加新的运算符、函数和常量。
这个解析器很简单(特别是在单个类中设计),方便进一步实现、扩展和修改。
值得关注的点
我更好地理解了解析器的工作原理,并学习了逆波兰表示法。
历史
- 2012/05/09:发布源代码 (1_0);
- 2012/06/07:优化解析器 (1_2);
- 2014/02/28:重写版本 (1_4)。