有关表达式解析的问题(asp.net,c#)

hululuya 2010-10-27 09:46:21
最近在做一个管理系统,需要动态添加管理指标。但指标之间需要做一些加减乘除的简单计算,但是指标是变动的,公式也是变动的,计划把公式存在数据库里,计算的时候调用公式,但是这个表达式如何解析呢?
而且解析之后还要从数据库中获取对应的值进行计算。

ID Name FatherID 数量 计算公式
1 蛋 0 1=2+3 (根据这个算出蛋的数量)
2 鸡蛋 1 5
3 鸭蛋 1 6

本人不是专门学编程的,这个东西又要的比较急,想了好些天了还是搞不定,如有高手能帮忙解决,不胜感激啊!
问题解决立即散分。
...全文
183 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hululuya 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hookyzlr 的回复:]
个人看法:
给用户一个组合计算公式的页面,页面中展现出你的DataTable,让用户选择列和加减乘除符合组合出一个计算公式。用户点击哪一列,你就把相应的列号记录下拉,组合成计算公式,存在数据库中,以后读取出该计算公式。用DataTable.Compute()计算。
[/Quote]
能不能给点代码?我研究了一通,还是没能实现得了。
mayanly 2010-11-01
  • 打赏
  • 举报
回复
等待高人!
兔子-顾问 2010-11-01
  • 打赏
  • 举报
回复
你要的是表达式计算?
double result = Convert.ToDouble(new DataTable().Compute("1+2"));
还是需要计算列?
wuhuabucai 2010-11-01
  • 打赏
  • 举报
回复
计算蛋总和
dt.Compute("sum(数量)","FatherID = 1 ");
wuhuabucai 2010-11-01
  • 打赏
  • 举报
回复
用datatable.compute可以合计
何需要再计算呢
dt.Compute("sum((a+b)/c)","id = 1 and id = 2 ");

能否?
hululuya 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 abcjun188 的回复:]
写清楚点逻辑可以试一试写给你
[/Quote]

数据表是这样的:
ID Name FatherID 数量 计算公式
1 蛋 0 1=2+3 (根据这个算出蛋的数量)
2 鸡蛋 1 5
3 鸭蛋 1 6
计算公式是不确定的,如果添加指标(4 鹅蛋 1 9),则更新公式为1=2+3+4,(计算公式可能是动态变化的)根据这个公式求得蛋数量=5+6+9。
由于公式是存在数据库中,所以要先判断该指标是否需要计算,然后解析公式。找到各个ID对应的值,并让它们按公式来进行运算。再把结果存起来。
公式都是比较简单的加减乘除,最复杂的就是(a+b)/c 这种的。
不知道这么说够清楚不。
hookyzlr 2010-11-01
  • 打赏
  • 举报
回复
个人看法:
给用户一个组合计算公式的页面,页面中展现出你的DataTable,让用户选择列和加减乘除符合组合出一个计算公式。用户点击哪一列,你就把相应的列号记录下拉,组合成计算公式,存在数据库中,以后读取出该计算公式。用DataTable.Compute()计算。
hululuya 2010-11-01
  • 打赏
  • 举报
回复
要求是系统的指标体系可以是动态的,比如有一个指标现在不用了,那就可以在指标体系管理页面更改这个指标体系,把这个指标从指标体系删除,如果用到新的指标也可以增加。
各项指标值之间的计算公式是存在数据库中,计算的时候调用公式,查找相应的值,然后按公式计算。
这样不用更改其他部分的代码,也就是说客户以后要改变指标体系自己修改就可以了。
paual779 2010-11-01
  • 打赏
  • 举报
回复
只要你能并接出运算表达式: (1+2)*5,就可以用
new DataTable().Compute("(1+2)*5", "").ToString(); 、
去计算。
hululuya 2010-11-01
  • 打赏
  • 举报
回复
我去研究一下大家说的DataTable().Compute
打一壶酱油 2010-10-28
  • 打赏
  • 举报
回复
写清楚点逻辑可以试一试写给你
hululuya 2010-10-28
  • 打赏
  • 举报
回复
求高手指导。
本文涵盖了C#编程的基础知识,包括错误处理机制、访问修饰符、并发处理策略、字符串与StringBuilder的区别、单例模式、ASP.NET页面间传递方式、重载与覆盖、WebServices与UDDI的概念、接口与类的异同、property与assembly的区别、DataReader与DataSet的对比、using与new的用途、递归算法实现斐波那契数列、委托与事件、变量传递与方法重写、B/S系统变量传递、控件遍历与赋值、冒泡排序算法、索引器实现、表达式求值、类实例创建、应用程序域、CTS、CLS、CLR解释、装箱与拆箱、受管制代码与强类型系统、程序集与配件、WebService调用方法、.NET Remoting工作原理、线程安全分析、XML文件遍历、枚举遍历访问、字符串对象创建、线程启动方法、构造器重写、String类继承限制、对象哈希码与引用比较、switch语句应用、同步方法与锁使用、抽象方法与静态方法、数组与string长度属性、sleep与wait方法区别、short类型操作、Session管理问题与解决、进程与线程区别、堆与栈区别、成员变量与成员函数静态使用、数组随机填充与去重、页面间参数传递方法、GAC含义、请求发送方式、软件开发阶段与关键字作用、反射机制、C#常用关键字介绍、错误代码解析、float类型转换、操作符声明与重载错误、ASP.NET自定义控件要求、序列化类标记、抽象类与接口区别、类继承限制、约瑟夫环问题实现、abc+cba=1333解题、笔购买组合问题、数组元素倒置与原地反转、数组元素插入与删除、代码本身打印、final、finally、finalize区别、const与staticreadonly比较、final类实例化、虚函数效率原因、new关键字使用、代码输出结果分析、C#与C++区别、引用类型与值类型区别、装箱与拆箱原理、explicit与implicit转换、DateTime类型处理、extern函数含义、静态引用与动态引用、AssemblyQualifiedName概念、assembly.load语法正确性、程序集强名组成部分、不可实例化类与抽象类、程序输出结果解释、虚函数效率低下原因、new关键字功能、代码输出结果理解

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧