Executar Formula
Tenho uma tabela que existe um campo chamado calculo que tem uma formula exemplo 10 * V + 100
Ai eu vou substituir o valor V por algo exemplo 2,10
Ai estou precisando de alguma função que execute 10 * 2,10 + 100
Que vai dar 121
Existe alguma função que faça isso?
Ai eu vou substituir o valor V por algo exemplo 2,10
Ai estou precisando de alguma função que execute 10 * 2,10 + 100
Que vai dar 121
Existe alguma função que faça isso?
Rudá
Curtidas 0
Respostas
Paulo
18/04/2008
Não entendi bem, mas veja se é isto?
function calcula(v: Double):Double;
begin
Result := 10*v+100
end;
como usar
Procedure TForm1.btncalculaClick(Sender: TObject);
var
n: Double;
begin
n := StrToFloat(Edit1.Text);
Edit2.Text :=FormatFloat(´0.00´, Calcula(n));
end;
GOSTEI 0
Cesar_gualberto
18/04/2008
O que você precisa é de um interpretador.
Existe um componente chamado ´JvInterpreterProgram´ que pertence a JVCL.
A JVCL tem diversos componentes totalmente gratuitos. Eles podem ser baixados
aqui: http://jvcl.sourceforge.net
Abaixo temos um exemplo de uma string repassada para o interpretador que calcula o resultado.
procedure TForm1.Button1Click(Sender: TObject);
begin
JvInterpreterProgram1.Pas.Text := ´10 * 2.10 + 100´;
JvInterpreterProgram1.Run;
ShowMessage(JvInterpreterProgram1.VResult);
end;
Existe um componente chamado ´JvInterpreterProgram´ que pertence a JVCL.
A JVCL tem diversos componentes totalmente gratuitos. Eles podem ser baixados
aqui: http://jvcl.sourceforge.net
Abaixo temos um exemplo de uma string repassada para o interpretador que calcula o resultado.
procedure TForm1.Button1Click(Sender: TObject);
begin
JvInterpreterProgram1.Pas.Text := ´10 * 2.10 + 100´;
JvInterpreterProgram1.Run;
ShowMessage(JvInterpreterProgram1.VResult);
end;
GOSTEI 0
Rudá
18/04/2008
Cesar,
É isso mesmo que eu queria.
Muito obrigado por sua ajuda.
É isso mesmo que eu queria.
Muito obrigado por sua ajuda.
GOSTEI 0
Marco Salles
18/04/2008
pode tb pela simplicidade da expressão usar a função abaixo :
ps : [b:40491c6434]note que o resultado ´r´ é um double[/b:40491c6434]
[u:40491c6434]o excesso de variávei é somente para tornar mais didático...[/u:40491c6434]
var posIni,PosFim:integer; s:string; v,r,a,b,c:double; begin s:=´10 * V + 100´; v:=2.1; s:=StringReplace(S,´V´,floattostr(v), [rfReplaceAll]); posIni:=pos(´*´,s); a:=strtofloat(trim(copy(S,1,posini-1))); posFim:=Pos(´+´,s); c:=StrtoFloat(trim(copy(s,posfim+1,length(s)-posFim))); r:=a*v+c; showmessage(floattostr(r)); end;
ps : [b:40491c6434]note que o resultado ´r´ é um double[/b:40491c6434]
[u:40491c6434]o excesso de variávei é somente para tornar mais didático...[/u:40491c6434]
GOSTEI 0
Rudá
18/04/2008
Marco,
Mas não é sempre a mesma formula
Pode existir no banco de dados mais de 1000 tipo diferentes de formulas.
Mas não é sempre a mesma formula
Pode existir no banco de dados mais de 1000 tipo diferentes de formulas.
GOSTEI 0
Marco Salles
18/04/2008
Marco,
Mas não é sempre a mesma formula
Pode existir no banco de dados mais de 1000 tipo diferentes de formulas.
eu pensei que fosse somente uma unica formula , ande o parametro a ser alterado seria o ´V´ ...
da para fazer , mas da um trabalho e tanto . Alem do mais o problema ja foi solucionado
Existe um componente chamado ´JvInterpreterProgram´ que pertence a JVCL.
então vamos deixar como esta beleza...
GOSTEI 0