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();

  • 相关阅读:
    Knight Moves
    Knight Moves
    Catch him
    Catch him
    Linux查看硬件信息以及驱动设备的命令
    23种设计模式彩图
    Android开发指南-框架主题-安全和许可
    Android启动组件的三种主流及若干非主流方式
    ACE在Linux下编译安装
    void及void指针含义的深刻解析
  • 原文地址:https://www.cnblogs.com/superfeeling/p/4970365.html
Copyright © 2011-2022 走看看