Z zhangxh Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #1 S:='A*0.32+B*0.45+C*1.68-D*99'; A:=100; B:=400; C:=800; D:=10; 现求表达式A*0.32+B*0.45+C*1.68-D*99的值? 我知道在VFP中通过 &S 即可得到答案?在DELPHI中有类似的函数吗? 请赐教!!! (急!!!)
S:='A*0.32+B*0.45+C*1.68-D*99'; A:=100; B:=400; C:=800; D:=10; 现求表达式A*0.32+B*0.45+C*1.68-D*99的值? 我知道在VFP中通过 &S 即可得到答案?在DELPHI中有类似的函数吗? 请赐教!!! (急!!!)
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #2 Delphi不支持宏,但是你的问题可以换用其他角度解决啊?
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #4 >>现求表达式A*0.32+B*0.45+C*1.68-D*99的值? x:=A*0.32+B*0.45+C*1.68-D*99; (但我觉得你的问题没有表述清楚,不知道你具体要实现什么功能。)
>>现求表达式A*0.32+B*0.45+C*1.68-D*99的值? x:=A*0.32+B*0.45+C*1.68-D*99; (但我觉得你的问题没有表述清楚,不知道你具体要实现什么功能。)
千 千中元 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #5 I c I c var a,b,c,d:integer; s:real; .... A:=100; B:=400; C:=800; D:=10; S:=A*0.32+B*0.45+C*1.68-D*99;
I c I c var a,b,c,d:integer; s:real; .... A:=100; B:=400; C:=800; D:=10; S:=A*0.32+B*0.45+C*1.68-D*99;
Z zhangxh Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #6 表达式S为一数据库字段GS(STRING)的值(在录入时所输的计算公式), 另一字段DATA(REAL)需根据GS的表达式计算的结果!清楚吗?
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #7 如果你的计算公式结构固定 s='k1*A+k2*B+k3*c+k4*D' 这个形式,你直接调整系数k1,k2,k3,k4就可以, 这样可以固定几个结构让用户输入系数。 如果是任意形式,即由用户来输入k1*A+k2*B*k3*C/(k4*D)甚至更恶心的形式, 嘿嘿,那你麻烦了,我就不会了。
如果你的计算公式结构固定 s='k1*A+k2*B+k3*c+k4*D' 这个形式,你直接调整系数k1,k2,k3,k4就可以, 这样可以固定几个结构让用户输入系数。 如果是任意形式,即由用户来输入k1*A+k2*B*k3*C/(k4*D)甚至更恶心的形式, 嘿嘿,那你麻烦了,我就不会了。
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #10 自己写解释器或者找个第三方控件(网上大把大把有)
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-14 #12 去http://www.torry.ru/找, 很多, 而且都有原代码
刘 刘素杰 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-15 #14 可自行编写解释函数。 由于表达式是让用户输入的,那么一定注意不允许出现非法情况 这样你就可以将所有的运算符(包括括号)都放在一个集合中, 通过循环分析表达式中的每一个字符,根据情况组合成真正的表达式
O only you Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-15 #16 用Format函数可以解决如: Format('There are now %d records in the table',[DataSet.RecordCount]); 可将%d处替换成数据记录行数 你的问题可如下解决 var s:string; total:double; begin s:=Format('%d*0.32+%d*0.45+%d*1.68-%d*99',[A,B,C,D]); 然后分析这个字串就行了,具体是判断运算符的位置,然后切开,分别转化成浮点数 然后计算
用Format函数可以解决如: Format('There are now %d records in the table',[DataSet.RecordCount]); 可将%d处替换成数据记录行数 你的问题可如下解决 var s:string; total:double; begin s:=Format('%d*0.32+%d*0.45+%d*1.68-%d*99',[A,B,C,D]); 然后分析这个字串就行了,具体是判断运算符的位置,然后切开,分别转化成浮点数 然后计算
Z zhangxh Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-15 #18 将该表达式生成逆波兰表达式,然后再解释,太麻烦!!! 有更简单的方法吗?
Z zhangxh Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-15 #19 Another_eYes: 我在WWW.TORRY.RU上找了,没找到? 我英文不太好,且不知道其被归到哪一类, 您能否告知具体的文件名??? 不胜感谢!!!
W wumeng Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-15 #20 to zhangxh: 收到您的邮件了,我说的有两种方法. 1.在程序中写死,这适用于公式定了的情况. 2.自已判断公式中的运算符号,生成表达式.这比较难些.