一、功能
该类实现了简单的算术表达式解析和计算,支持 ±*/%^ () 运算符。
二、先看效果
[TestMethod()]
public void EvalTest()
{
Assert.AreEqual(MathEvalor.Eval<double>("-12 * ( - 2.2 + 7.7 ) - 44 * 2"), -154d);
Assert.AreEqual(MathEvalor.Eval<double>("12 % (1+4)"), 2);
Assert.AreEqual(MathEvalor.Eval<double>("3^(1+1)"), 9);
}
二、代码
代码逻辑很简单,用一个操作符堆栈和一个值堆栈实现。先依个解析表达式,遇到数字就丢到值堆栈,遇到操作符就判定,是该计算还是出入堆栈处理。等所有操作符都出栈计算完毕后,值堆栈里面的值就是表达式的值。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace App.CodeDoms
{
/// <summary>
/// 简单的数学运算解析器。支持 +-*/%^运算。
/// 更复杂的支持常量、布尔值、函数的请查看 MathEval.NET 项目.
/// </summary>
public class MathEvalor
{
/// <summary>