如何计算字符串的值? str="12+12.3*24"类似这样的字符串如何得到计算结果? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先根据+ - * / () split为数字和运算符,然后再根据运算符对数字进行计算召唤更简单的方法 要处理这种运算, 一是用栈,将操作数和操作符压入不同的栈,依照优先级进行运算.二,将式子解析成一棵树,再求结果.楼主找本<数据结构>看看,里面讲得很详细 str="12+12.3*24"类似这样的字符串如何得到计算结果?----------------------str = 12+12.3*24+""; 使用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 );} To:bobo0124(bobo0124) 解释一下好吗,我也想了解 我有一馊主意,楼主试试利用SqlCommand传到SqlServer里面计算一下,然后返回结果就不用写解析器了 楼上高人啊。好像不用来回往数据库里跑,在Table里或DataSet里就可以计算吧。我See See 去 re fd7893CodeDom 提供动态编译功能,上面得代码将表达式作为一段代码,使用CodeDom编译并运行。就得到了表达式得值。更多的,可以参考http://msdn2.microsoft.com/zh-cn/library/650ax5cx.aspx To: bobo0124(bobo0124) ——————————————谢谢 使用CodeDom有点大马拉小车的感觉,速度不高,如果仅是做一些简单的四则运算没有必要用动态编译技术,如果你学过编译原理,做四则运算这样功能应该没什么问题。网上类似的程序很多 添加msjscript引用,使用eval方法。 谢谢各位!chieftech的方法我也想到了。www_123du_com(鼠·神·泪)的方法应该是正解,搜索过以前的帖子,就是这么解决的。散分! 这样也可以......哈哈.是不是很简单... DataTable dt = new DataTable(); object obj = dt.Compute("12+12.3*24", "0"); lz、www_123du_com(鼠·神·泪)可以把eval()方法说的具体点吗???后面的参数怎么写?试了失败了,谢谢 程序员的福音---去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上,并留下联系方式,我们网站的技术部门和客服会在第一时间审核安排. http://community.csdn.net/Expert/topic/5020/5020789.xml?temp=.3727228借点人气接点分 新查询所返回的架构与基查询不同 在父窗口里载入子窗口 急!!!在线等!!!webservice通过网闸取数据的问题 【求教】按钮控件的问题 这是什么意思? 有没有办法在datalist新增一条记录后立即进入编辑模式? [Winform]下面的功能如何实现?给个思路 请问怎么样才能获得上一个月的最后一天的datetime值 如何获取wsWorkSheet.get_Range("A1", "G1")每一个元素的值 关于控件数组 Updater Application Block v2更新速度特别慢,有办法么? 在C/S结构中连接数据库的问题!
召唤更简单的方法
二,将式子解析成一棵树,再求结果.楼主找本<数据结构>看看,里面讲得很详细
----------------------
str = 12+12.3*24+"";
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 );
}
bobo0124(bobo0124) 解释一下好吗,我也想了解
利用SqlCommand传到SqlServer里面计算一下,然后返回结果
就不用写解析器了
好像不用来回往数据库里跑,在Table里或DataSet里就可以计算吧。
我See See 去
CodeDom 提供动态编译功能,上面得代码将表达式作为一段代码,使用CodeDom编译并运行。
就得到了表达式得值。更多的,可以参考
http://msdn2.microsoft.com/zh-cn/library/650ax5cx.aspx
——————————————
谢谢
www_123du_com(鼠·神·泪)的方法应该是正解,搜索过以前的帖子,就是这么解决的。
散分!
DataTable dt = new DataTable();
object obj = dt.Compute("12+12.3*24", "0");
试了失败了,谢谢
最全面的程序开发资料网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上,并留下联系方式,我们网站的技术部门和客服会在第一时间审核安排.
接点分