zoukankan      html  css  js  c++  java
  • asp.net字符串的数学表达式计算结果

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.CodeDom.Compiler;
    using System.Reflection;
    
    namespace WebApplication1
    {
        /// <summary>
        /// 动态求值
        /// </summary>
        public class FormulaCalculator
        {
            /// <summary>
            /// 计算结果,如果表达式出错则抛出异常
            /// </summary>
            /// <param name="statement">表达式,如"1+2+3+4"</param>
            /// <returns>结果</returns>
            public static object Eval(string statement)
            {
                return _evaluatorType.InvokeMember(
                            "Eval",
                            BindingFlags.InvokeMethod,
                            null,
                            _evaluator,
                            new object[] { statement }
                         );
            }
    
            static FormulaCalculator()
            {
                //构造JScript的编译驱动代码
                CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
    
                CompilerParameters parameters;
                parameters = new CompilerParameters();
                parameters.GenerateInMemory = true;
    
                CompilerResults results;
                results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
    
                Assembly assembly = results.CompiledAssembly;
                _evaluatorType = assembly.GetType("Evaluator");
    
                _evaluator = Activator.CreateInstance(_evaluatorType);
            }
    
            private static object _evaluator = null;
            private static Type _evaluatorType = null;
    
            /// <summary>
            /// JScript代码
            /// </summary>
            private static readonly string _jscriptSource =
                @"class Evaluator
                  {
                      public function Eval(expr : String) : String 
                      { 
                         return eval(expr); 
                      }
                  }";
        }
    }

    调用方法:string a = FormulaCalculator.Eval("(2000+100)*0.53*16.14+500").ToString();

  • 相关阅读:
    springmvc跳转的几种方式
    DFL库安装dmd2
    python中关于turtle库的学习笔记
    带有进度条的圆周率计算
    Splay——学习笔记
    简述树链剖分
    数学专题——学习笔记
    CDQ分治(三维偏序)——学习笔记
    概率与期望DP
    CSP模拟赛20190922
  • 原文地址:https://www.cnblogs.com/superfeeling/p/4970365.html
Copyright © 2011-2022 走看看