向各位求教表达式(涉及按行计算)的问题(Online等待) 谢谢各位,可开贴另送分 ( 积分: 200 )

  • 主题发起人 主题发起人 saridon
  • 开始时间 开始时间
S

saridon

Unregistered / Unconfirmed
GUEST, unregistred user!
举一例子说明如下:
有一表格,假如有这样几列:(可看广联达的清单计价软件)
行号 名称 取费基数 结果
1 A ZJF
2 B F3+F4
3 C F1*3
4 D F1*4
5 合计 F1:F2

Fn代表第几行,如:F1,F2
F1:F2代表F1+F2

其中ZJF为一变量代表直接费,假如是50,则F3为50*3, F4为50*4,
F2为50*3+50*4等等
不知有没有什么好方法解决?或者有无现成的组件,谢谢各位,解决大大加分!
 
举一例子说明如下:
有一表格,假如有这样几列:(可看广联达的清单计价软件)
行号 名称 取费基数 结果
1 A ZJF
2 B F3+F4
3 C F1*3
4 D F1*4
5 合计 F1:F2

Fn代表第几行,如:F1,F2
F1:F2代表F1+F2

其中ZJF为一变量代表直接费,假如是50,则F3为50*3, F4为50*4,
F2为50*3+50*4等等
不知有没有什么好方法解决?或者有无现成的组件,谢谢各位,解决大大加分!
 
我想你,应该要这样的控件:

unit calc;

(*
//.TITLE Calculator
//.DESC Simple calculator for standard expressions
//.AUTOR Ivlev M.Dmitry
// Email: Dimon@Diogen.nstu.nsk.su
//.PATCHED Sergey Pedora
// Email: Sergey@mail.fact400.ru
//

Syntax:
0xABCD, 0ABCDh, $ABCD - Hex number
0b0101, 01010b, - Binary number
90`15`2 - Degree
Operators by priorities:
{ 7} () (BRACES)
{ 6} ** (POWER),
{ 5} ~ (INVERSE), ! (NOT),
{ 4} * (MUL), / (DIV), % (MOD), %% (PERSENT),
{ 3} + (ADD), - (SUB),
{ 2} < (LT), <= (LE), == (EQ), <> != (NE), >= (GE), > (GT),
{ 1} | (OR), ^ (XOR), & (AND),

*)

他能支持变量:
如,你的表达式为F2(用那控件时写成F*2)
然后对Variables[F] := 50;
然后Result就会得出结果。
 
要不你留个QQ,我发给你。还有DEMO..
 
谢谢CoolSlob
这个是DBGrid表,它不仅仅是完成表达式的基本计算,还要完成按行求值
其中系统中已存在很多公用变量如:ZJF,SSF,DDF等等.
比如上例中F1代表的是ZJF.

按行求值:要求F2必须先求F3和F4,而F3和F4还有可能引用其他行的值.

 
我的QQ是35263021
,:)多谢
 
那你应该检查一下设计的问题了。
是不是换种方式来实现会比较好
 
表达式的基本计算我用的是BitSoft的MathParser
 
这个命题接近编译器的原理,你可以看一下该方面资料。
如词法分析,语法分析,最后再语法实现。
 
后退
顶部