DELPHI - TEDIT COM EXPRESSÃO MATEMATICA

17/04/2015

0

Como faço para calcular uma expressão matematica carregado num edit?
Por exemplo:
Tenho um Edit1.Text = 0+50*1-60-60*0+10
Defino uma variável s : integer;
Quando tento carregar a varável s com o resultado da edit diz que a expressão não é um inteiro válido.

s := StrToInt(Edit1.Text) - aqui dá o erro.

Como resolver?

Obrigado.
Clovis Perazza

Clovis Perazza

Responder

Post mais votado

18/04/2015

Bom Dia

Se for expressão simples assim, você terá que ir quebrando a string exemplo: Valor Operador Valor Operador Valor, e fazer uma lógica onde verifica quais deve ser calculados primeiro, no caso do seu exemplo a multiplicação, qual a necessidade desse tipo de cálculo?

Essa função para calcular Expressão por expressão, agora tem que ver a lógica para qual vai calcular primeiro.
function CalculaValor(pValor1: extended; pValor2: Extended; pOperador: string): Extended;
var
        lRetorno: Extended;
begin
         if(pOperador = '+') then
           lRetorno := pValor1 + pValor2;
   
         if(pOperador = '-') then
           lRetorno := pValor1 - pValor2;

         if(pOperador = '*') then
           lRetorno := pValor1 * pValor2;

         if(pOperador = '/') then
           lRetorno := pValor1 / pValor2;

         result := lRetorno;
end;

Lucas Ramos

Lucas Ramos
Responder

Mais Posts

18/04/2015

William


Tenho um Edit1.Text = 0+50*1-60-60*0+10

s := StrToInt(Edit1.Text) - aqui dá o erro.


Só complementando a excelente resposta do colega Lucas em relação ao erro!

Esses caracteres (*, -, +) são considerados strings, então quando você usa a função StrToInt() ela vai tentar converter números dentro da string em inteiros, mas como mencionei os caracteres que você usa para operações matemáticas são lidos como string por isso gera o erro.

O ideal seria você quebrar em operações menores mesmo.
Responder

18/04/2015

Clovis Perazza

Obrigado ao Lucas e ao William pela colaboração.
Valeu amigos.
Responder

12/05/2020

Elison Faria

um pequeno ajuste, se for (10) - (-5) == 15 então colocando o abs antes 10 - abs(-5) => 10 - 5 = 5
mas se vc não precisar desta regra, use sem o abs

function CalculaValor(pValor1: extended; pValor2: Extended; pOperador: string): Extended;
var
lRetorno: Extended;
begin
if(pOperador = '+') then
lRetorno := pValor1 + pValor2;

if(pOperador = '-') then
lRetorno := pValor1 - abs(pValor2); // se o valor for negativo vira positivo, o abs resolve este problema

if(pOperador = '*') then
lRetorno := pValor1 * pValor2;

if(pOperador = '/') then
lRetorno := pValor1 / pValor2;

result := lRetorno;
end;
Responder

12/05/2020

Emerson Nascimento

utilize um expression parser. há vários. segue um exemplo (gratuito e com fonte):

http://www.sparcs-center.org/expression-parser



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar