str="12+12.3*24"类似这样的字符串如何得到计算结果?

解决方案 »

  1.   

    先根据+ - * / () split为数字和运算符,然后再根据运算符对数字进行计算
    召唤更简单的方法
      

  2.   

    要处理这种运算, 一是用栈,将操作数和操作符压入不同的栈,依照优先级进行运算.
    二,将式子解析成一棵树,再求结果.楼主找本<数据结构>看看,里面讲得很详细
      

  3.   

    str="12+12.3*24"类似这样的字符串如何得到计算结果?
    ----------------------
    str = 12+12.3*24+"";
      

  4.   

    使用System.CodeDom, 动态编译
    public static object GetValue( string value)
    {
    string codeSnippet = "using System; " + "\r\n" +
    "namespace SnippetCompiler {" + "\r\n" +
    " public class Eval" + "\r\n" +
    " {" + "\r\n" +
    "       public Eval(){} " + "\r\n" +
    "  public object GetValue()" + "\r\n" +
    "  {" + "\r\n" + 
    "   return "  + value+";" + "\r\n" +
    "  }" + "\r\n" +
    " } }";
    CodeSnippetCompileUnit unit = new CodeSnippetCompileUnit( codeSnippet ); 
     
    ICodeCompiler compiler =  new CSharpCodeProvider().CreateCompiler();
    CompilerParameters para = new CompilerParameters();
    para.ReferencedAssemblies.Add( "System.dll" );
    para.GenerateInMemory = true;
    para.GenerateExecutable = false;
    para.OutputAssembly = "Eval.dll";
      
    Assembly asm = compiler.CompileAssemblyFromDom( para , unit ).CompiledAssembly;
       
    Type type = asm.GetType( "SnippetCompiler.Eval" );
    MethodInfo mi = type.GetMethod( "GetValue" , BindingFlags.Public | BindingFlags.Instance );      object obj = asm.CreateInstance( "SnippetCompiler.Eval" );
    return mi.Invoke( obj , null );
    }
      

  5.   

    To:
    bobo0124(bobo0124) 解释一下好吗,我也想了解
      

  6.   

    我有一馊主意,楼主试试
    利用SqlCommand传到SqlServer里面计算一下,然后返回结果
    就不用写解析器了
      

  7.   

    楼上高人啊。
    好像不用来回往数据库里跑,在Table里或DataSet里就可以计算吧。
    我See See 去
      

  8.   

    re fd7893
    CodeDom 提供动态编译功能,上面得代码将表达式作为一段代码,使用CodeDom编译并运行。
    就得到了表达式得值。更多的,可以参考
    http://msdn2.microsoft.com/zh-cn/library/650ax5cx.aspx
      

  9.   

    To: bobo0124(bobo0124) 
    ——————————————
    谢谢
      

  10.   

    使用CodeDom有点大马拉小车的感觉,速度不高,如果仅是做一些简单的四则运算没有必要用动态编译技术,如果你学过编译原理,做四则运算这样功能应该没什么问题。网上类似的程序很多
      

  11.   

    添加msjscript引用,使用eval方法。
      

  12.   

    谢谢各位!chieftech的方法我也想到了。
    www_123du_com(鼠·神·泪)的方法应该是正解,搜索过以前的帖子,就是这么解决的。
    散分!
      

  13.   

    这样也可以......哈哈.是不是很简单...          
      DataTable dt = new DataTable();
      object obj = dt.Compute("12+12.3*24", "0");
      

  14.   

    lz、www_123du_com(鼠·神·泪)可以把eval()方法说的具体点吗???后面的参数怎么写?
    试了失败了,谢谢
      

  15.   

    程序员的福音---去www.mylinux.com.cn看看吧,程序员的图书馆
    最全面的程序开发资料网www.mylinux.com.cn
    包罗java,linux,数据库,安全等等技术资料,更有众多软件外包项目我们的qq群:15096318 学习程序的都可以来华资软件作为一家专业的软件公司,现公开承接各种软件外包项目.
    www.mylinux.com.cn国内最大的网上软件加工厂,提供最完善的软件外包服务,采用流水型操作流程。中国软件业的发展不缺人才也不缺资金,缺的是人才的组织和管理,MyLinux平台的建设解决了软件人才的组织和管理问题,将每一项目最合适的软件开发人才以最有效率的形式组织在一起,从而取得1+1〉2的效果。
      MyLinux(www. MyLinux.com.cn)由上海巨灵信息技术有限公司主办,是目前国内最大的网上软件加工厂,该网站将提供最完善的软件外包服务,采用流水型操作流程。详情请登陆www. MyLinux.com.cn
    您可把您的具体要求发布在http://www.mylinux.com.cn/guiderAction.do?type=7上,并留下联系方式,我们网站的技术部门和客服会在第一时间审核安排.
      

  16.   

    http://community.csdn.net/Expert/topic/5020/5020789.xml?temp=.3727228借点人气
    接点分