Bom dia. Não deu pra entender. Está vaga sua questão. Se você quer pegar
esta string de algum lugar específico e executar pra obter o resultado,
parece simples, veja:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Calculador(sExpressao: string; iDigitosResultado: Byte): String;
var
z: Char;
iPos: Integer;
function StrToReal(sString: string): Real;
var
r: Real;
Pos: Integer;
begin
Val(sString, r, Pos);
if Pos > 0 then Val(Copy(sString, 1, Pos - 1), r, Pos);
Result := r;
end;
function RealToStr(iNumeroReal: Extended; iDigitos: Byte): string;
var
S: string;
begin
Str(iNumeroReal: 0: iDigitos, S);
realToStr := S;
end;
procedure NextChar;
var
s: string;
begin
if ipos > Length(sExpressao) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(sExpressao, ipos, 1);
z := s[1];
Inc(ipos);
end;
if z = ' ' then nextchar;
end;
function Expressao: Real;
var
w: Real;
function Factor: Real;
var
ws: string;
begin
Nextchar;
if z in ['0'..'9'] then
begin
ws := '';
repeat
ws := ws + z;
nextchar
until not (z in ['0'..'9', '.']);
Factor := StrToReal(ws);
end
else if z = '(' then
begin
Factor := Expressao;
nextchar
end
else if z = '+' then Factor := +Factor
else if Z = '-' then Factor := -Factor;
end;
function Term: Real;
var
W: Real;
begin
W := Factor;
while Z in ['*', '/'] do
if z = '*' then w := w * Factor
else
w := w / Factor;
Term := w;
end;
begin
w := term;
while z in ['+', '-'] do
if z = '+' then w := w + term
else
w := w - term;
Expressao:= w;
end;
begin
ipos := 1;
Result := RealToStr(Expressao, iDigitosResultado);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sExpressao: string;
begin
sExpressao := '(100 * 25)/100';
ShowMessage(sExpressao + ' = ' + Calculador(sExpressao, 3));
end;
Teste aí e retorne. Só um detalhe aritimético estimado: essa conta aí que
você apresentou no exemplo dispensa o parêntesis.
Saudações.
---
[]'s
Alexandre
Frase da semana: "De todos os meios que conduzem o homem à riqueza, os dois
mais certos são ser perseverante e ser trabalhador." (Reyband)
Frase de la semana: "De todos los medios que llevan un hombre a la riqueza,
los dos más ciertos y saludable és estar perseverando y ser trabajador."
(Reyband)
-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Edilson Gonçalves
Enviada em: quinta-feira, 1 de junho de 2006 18:16
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] Decompor Expressão Matemática
Amigos,
Estou com o seguinte problema: Tenho armazenado no Banco de Dados como uma
string uma expressão matemática, como por exemplo: (100 * 25)/100, INCLUSIVE
COM OS PARENTESES.
--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
<*> Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages
<*> Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
Yahoo! Grupos, um serviço oferecido por: | |
|
Links do Yahoo! Grupos
- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
- Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.