65.9K
CodeProject 正在变化。 阅读更多。
Home

Math Parser .NET C#

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (39投票s)

2012年5月14日

GPL3

1分钟阅读

viewsIcon

191391

downloadIcon

13249

这是一个轻量级、快速且易于理解的数学解析器,它在一个类中设计,接收数学表达式(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)。

© . All rights reserved.