如何让用户自定义公式,得出一个值 (200分)

我开头举的是一个简单例子,事实上有更复杂的公式:
Label1.caption:=Floattostr((strtofloat(Label2.caption)+strtofloat(Label4.caption)-strtofloat(Label7.caption))*23.9%)
 
我觉得用数量库完全可以实现你说的功能,你可以定义一个函数来做上述工作,最后返回一个值给LABEL1就可以了。
 
你那个复杂的转化为SQL也就是:
SELECT (LABEL2 + LABEL4 - LABEL7)*0.239 AS LABEL1 FROM 表1
 
有许多表达式计算控件可以解决此问题,我手上就有一个,名为CalcExpress,它可以接受类似如:(sin(12.3)*34.52+6^2-23)的计算表达式,你只需将LABEL1.CAPTION等直接替换公式中的数据即可.如让用户将公式输成类似字符串:sin(X),然后你用label1.caption的值去替换X,再将转换的字符串通过表达式计算器调用求出SIN(X)的值,方法如CalcExpress1.Formula:=s; d:=CalcExpress1.calc([0]);其中d就是表达式的计算结果.
如果你需要此控件,请发EMAIL至yhcfx@sohu.com,我将给你发送一份.
 
我对CalcExpress控件稍加改造,将其与数据库结合,制成了一个表达式计算器,它可以保存你输入的若干个计算公式,公式中可以使用变量,且变量名称由用户自定,变量也可以任意多个,当你调入公式或输入公式之后,只要将公式中对应的各变量的值进行修改,就可以返回计算结果,你应该也可以实现吧.
 
建议搜索一个Parser控件,该控件可由用户自定义公式计算,非常方便。
 
把你的:
1 工天 Label1
2 工程费 Label2
3 工日 Label3
4 小计 Label4
5 合计 Label5
对应设为数组,S[1。。。5]

建一个表A只有一个字段TOTAL。TOTAL 存储你定义的公式
如 : S[1] + S[2] - S[3]

计算时取出TOTAL所存储的
S[1] + S[2] - S[3]
用函数把其中的S[1],S[2],S[3]对应替换为你FORM中的数值,
当然须是数,存入变量ATOT_S中
然后随便在ADOquery中写:
ADOquery.sql.text := ' select '+ quotedtostr(ATOT_s)
利用SQL的计算功能,取出就行!
当然,没有调试,你可以调通他!
我想是最简单的了!
Good Luck !

 
顶部