提问前请先搜索。回复人: li_zhifu(东北人) ( ) 信誉:100 2002-2-16 20:02:45 得分:0
唉,你们都是怎么了,这个问题M$已经有了一个解决方案了。在Win2K下在Delphi中Import ActiveX Control,选Microsoft Script Control 1.0,安装,在应用程序中
ScriptControl1.Language:='JavaScript';
ShowMessage(ScriptControl1.Eval('2*3+5'));
就可以了。
在Win98中可以把Win2K下的msscript.ocx拷过来用。
此控件可以进行复杂的运算,如支持'(',组合运算等。甚至可以对整型数进行位运算。
唉,你们都是怎么了,这个问题M$已经有了一个解决方案了。在Win2K下在Delphi中Import ActiveX Control,选Microsoft Script Control 1.0,安装,在应用程序中
ScriptControl1.Language:='JavaScript';
ShowMessage(ScriptControl1.Eval('2*3+5'));
就可以了。
在Win98中可以把Win2K下的msscript.ocx拷过来用。
此控件可以进行复杂的运算,如支持'(',组合运算等。甚至可以对整型数进行位运算。
解决方案 »
- 全部家当求人帮忙,吧这个delphi语言写的翻译成易语言的源码!谢谢大家了跪拜!(知识就是财富)
- ExpressQuantumGrid 和TdxDBTreeList
- 关于FastReport的问题?
- 高手帮忙
- 关于数据插入,谢谢各位了
- 怎样获得Tdxdbgrid中某个节点(node)的绝对索引值
- 字符串提取问题!在线给分!!!
- Access数据库中用ADOQuery怎么那么多问题,
- 如何在DBGrid的OnTitleclick时间中确定点击的是哪一列?
- 执行 imageenmview.mio.SaveToFileTIFF时,报内存溢出,该如何处理??
- 病毒问题
- 怎样在statusbar中显示键盘信息,
const
a = '+';
b = '-';
c = '*';
d = '/';
ea= '(';
eb= ')';
function GetToken(Value:String):String;
var
P1,P2:Integer;
begin
Result := '';
P1 := Pos(ea,Value);
if P1 <> 0 then
begin
P2 := Pos(eb,Value);
Result := Copy(Value,P1+1,P2-P1-1);
end;
end;
function GetResult(Value:String):String;
var
P1,P2,P3,P4,i,nStart,nEnd,P:Integer;
N1,N2 : Real;
Tmp : String;
IsFuShu : Boolean;
begin
IsFuShu := False;
N1 := 0;
N2 := 0;
P := 0;
P1 := Pos(c,Value);
P2 := Pos(d,Value);
P3 := Pos(a,Value);
P4 := Pos(b,Value);
while (P1<>0)or(P2<>0)or(P3<>0)or(P4<>0) do
begin
if (P3<>0) and (P4=0) then
P := P3;
if (P3=0) and (P4<>0)then
P := P4;
if (P3<>0) and (P4<>0) and (P4>P3) then
P := P3;
if (P3<>0) and (P4<>0) and (P4<P3) then
P := P4;
if (P1<>0) and (P2=0) then
P := P1;
if (P1 =0) and (P2<>0)then
P := P2;
if (P1<>0) and (P2<>0) and (P2>P1) then
P := P1;
if (P1<>0) and (P2<>0) and (P1>P2) then
P := P2;
if P <> 0 then
begin
for i := P-1 downto 1 do
begin
if (Value[i]=a)or(Value[i]=b)or(Value[i]=c)
or(Value[i]=d)or(Value[i]=ea)or(i=1) then
begin
if i<>1 then
N1 := StrToFloat(Copy(Value,i+1,P-i-1))
else
N1 := StrToFloat(Copy(Value,1,P-1));
Break;
end;
end;
if i<>1 then
nStart := i+1
else nStart := 1;
for i := P+1 to Length(Value) do
begin
if (Value[i]=a)or(Value[i]=b)or(Value[i]=c)
or(Value[i]=d)or(Value[i]=eb)or(i=Length(Value)) then
begin
if i<>Length(Value) then
N2 := StrToFloat(Copy(Value,P+1,i-P-1))
else
N2 := StrToFloat(Copy(Value,P+1,i));
Break;
end;
end;
if i=Length(Value) then
nEnd := i+1
else
nEnd := i;
if P=P1 then
Tmp := FloatToStr(N1*N2);
if P=P2 then
Tmp := FloatToStr(N1 / N2);
if P=P3 then
Tmp := FloatToStr(N1+N2);
if P=P4 then
begin
if N1<N2 then
begin
IsFuShu := Not IsFuShu;
Tmp := FloatToStr(N2-N1);
end;
if N1>N2 then
Tmp := FloatToStr(N1-N2);
end;
if nEnd <> 1 then
Delete(Value,nStart,nEnd-nStart)
else
Delete(Value,nStart,nEnd);
Insert(Tmp,Value,nStart);
end;
P1 := Pos(c,Value);
P2 := Pos(d,Value);
P3 := Pos(a,Value);
P4 := Pos(b,Value);
end;
if IsFuShu then
Result := '-'+Value
else
Result := Value;
end;
var
S : String;
P1,P2 : Integer;
begin
P1 := Pos(ea,Value);
P2 := Pos(eb,Value);
while GetToken(Value) <> '' do
begin
P1 := Pos(ea,Value);
P2 := Pos(eb,Value);
S:=GetToken(Value);
S:=GetResult(S);
Delete(Value,P1,P2-P1+1);
Insert(S,Value,P1);
end;
Result := GetResult(Value);
end;
怎么这么多的人要做这样的东西呀?
S为你要计算的字符串
用Edit1.Text:=sum(S);
Edit1.Text就是计算结果
你要把结果转为整形的就用StrToInt(..)来转换吧。
唉,你们都是怎么了,这个问题M$已经有了一个解决方案了。在Win2K下在Delphi中Import ActiveX Control,选Microsoft Script Control 1.0,安装,在应用程序中
ScriptControl1.Language:='JavaScript';
ShowMessage(ScriptControl1.Eval('2*3+5'));
就可以了。
在Win98中可以把Win2K下的msscript.ocx拷过来用。
此控件可以进行复杂的运算,如支持'(',组合运算等。甚至可以对整型数进行位运算。