如何计算字符型表达式如:12+3*5/10的值,返回数值型结果13。5如:
var
aaa:string;
begin
aaa:='(12+3*6)/3';
如何得到aaa的值返回10为数值型.
因为表达式可能为aaa:='25+6*9'
其他语言如:access中有相应的函数;exl
var
aaa:string;
begin
aaa:='(12+3*6)/3';
如何得到aaa的值返回10为数值型.
因为表达式可能为aaa:='25+6*9'
其他语言如:access中有相应的函数;exl
解决方案 »
- 运行Delphi2010时的问题
- 关于点击按钮操作成功后弹出气泡提示:“操作成功!”并播放一段wav。大家说说自己的方法,兼收并蓄,择优录用,一律给分
- 请问如何用SQL将 database desktop 建的数据库表转换成 MSSQL的呀~!!!!!!!!!
- delphi6如何设置为发布模式
- (紧急求救)请问在Delphi中如何使用扫描枪取得条形码?
- 我问问是否能在DELPHI中实现两个数据表的字段合并到入第三个数据表中!
- SOS 神啊,救救我吧
- 请问如何在普通服务器上安装NT4.0,使C盘分区大于2G(本人的安装方式是用DOS6.22启动后对硬盘分区,C盘最大为2G。不知有什么好的安装方式?)
- 请问delphi中有没有宏函数
- Delphi4在Win2000下报错“Cannot Create File!”!!!急、急、急
- 我用DELPHI的原因!
- 网络针测!
如何使bbb:=aaa
即得到,结果10;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
valuelist:tstringlist;
fhlist:tstringlist;
function mathways(mathstr:string):string;
procedure putvaluetolist(s1:string);
function listisnull:boolean;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
self.Edit2.Text:=self.mathways(self.Edit1.Text);
end;
//-----------------------------------------------------------------------------
function TForm1.mathways(mathstr:string):string;
var
s1:string;
i,icount:integer;
str,str1,str2:string;
begin
valuelist:=tstringlist.Create();
fhlist:=tstringlist.Create();
self.putvaluetolist(mathstr);
while not self.listisnull do
begin
for i:=0 to fhlist.Count-1 do
begin
if (fhlist.Strings[i]='*')or(fhlist.Strings[i]='/') then
begin
str1:=valuelist.Strings[i];
str2:=valuelist.Strings[i+1];
if fhlist.Strings[i]='*' then
begin
str:=floattostr(strtofloat(str1)*strtofloat(str2));
valuelist.Strings[i]:=str;
valuelist.Delete(i+1);
fhlist.Delete(i);
end
else if fhlist.Strings[i]='/' then
begin
str:=floattostr(strtofloat(str1)/strtofloat(str2));
valuelist.Strings[i]:=str;
valuelist.Delete(i+1);
fhlist.Delete(i);
end;
break;
end; end;
end;
while fhlist.Count>0 do
begin
for i:=0 to fhlist.Count-1 do
begin str1:=valuelist.Strings[i];
str2:=valuelist.Strings[i+1];
if fhlist.Strings[i]='+' then
begin
str:=floattostr(strtofloat(str1)+strtofloat(str2));
valuelist.Strings[i]:=str;
valuelist.Delete(i+1);
fhlist.Delete(i);
end
else if fhlist.Strings[i]='-' then
begin
str:=floattostr(strtofloat(str1)-strtofloat(str2));
valuelist.Strings[i]:=str;
valuelist.Delete(i+1);
fhlist.Delete(i);
end;
break
end;
end;
s1:=valuelist.Strings[0];
valuelist.Free;
fhlist.Free;
result:=s1;
end;
procedure TForm1.putvaluetolist(s1:string);
var
i:integer;
icount:integer;
s2:string;
begin
icount:=0;
for i:=1 to length(s1) do
begin
if (s1[i]='*') or(s1[i]='/') or(s1[i]='+') or(s1[i]='-') then
begin
valuelist.Add(copy(s1,icount+1,i-icount-1));
fhlist.Add(copy(s1,i,1));
icount:=i;
end;
if i=length(s1) then
begin
valuelist.Add(copy(s1,icount+1,i-icount));
end;
end;
end;
function tform1.listisnull:boolean;
var
flag:boolean;
i:integer;
begin
flag:=true;
for i:=0 to fhlist.Count-1 do
begin
if (fhlist.Strings[i]='*') or(fhlist.Strings[i]='/') then
begin
flag:=false;
break;
end;
end;
result:=flag;
end;
end.