写一个公式解释器 function DoCalc(s:string):real; begin ... result:=...; end;
参考一下这个 function ExpCalc(exp: string): string; var vScript: Variant; begin vScript := CreateOleObject('ScriptControl'); vScript.Language := 'VBScript'; Result := vScript.Eval(exp); end;procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:=ExpCalc('100 *4.17/0.5*(55.22+22)/3.14'); ShowMessage(s); end;
我知道有一个第三方组件可以实现你的要求。 你去搜一下: Expression parser
uses ComObjfunction CalcExp(Formula: string): string; //表达式计算 var js: OleVariant; begin js := CreateOleObject('ScriptControl'); js.Language := 'JavaScript'; try try Result := js.Eval(Formula); except Result := 'Err'; end; finally js := Unassigned; end; end;
就是把中序表达式转换为逆波兰表达式,然后计算
参见:
http://baike.baidu.com/view/552648.htm
function DoCalc(s:string):real;
begin
...
result:=...;
end;
function ExpCalc(exp: string): string;
var
vScript: Variant;
begin
vScript := CreateOleObject('ScriptControl');
vScript.Language := 'VBScript';
Result := vScript.Eval(exp);
end;procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:=ExpCalc('100 *4.17/0.5*(55.22+22)/3.14');
ShowMessage(s);
end;
你去搜一下:
Expression parser
uses ComObjfunction CalcExp(Formula: string): string; //表达式计算
var
js: OleVariant;
begin
js := CreateOleObject('ScriptControl');
js.Language := 'JavaScript';
try
try
Result := js.Eval(Formula);
except
Result := 'Err';
end;
finally
js := Unassigned;
end;
end;