DELPHI - TEDIT COM EXPRESSÃO MATEMATICA
17/04/2015
0
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
Post mais votado
18/04/2015
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
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.
18/04/2015
Clovis Perazza
Valeu amigos.
12/05/2020
Elison Faria
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;
12/05/2020
Emerson Nascimento
http://www.sparcs-center.org/expression-parser
Clique aqui para fazer login e interagir na Comunidade :)