DELPHI - TEDIT COM EXPRESSÃO MATEMATICA
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.
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
Curtidas 0
Melhor post
Lucas Ramos
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.
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;
GOSTEI 1
Mais Respostas
William
17/04/2015
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.
GOSTEI 1
Clovis Perazza
17/04/2015
Obrigado ao Lucas e ao William pela colaboração.
Valeu amigos.
Valeu amigos.
GOSTEI 0
Elison Faria
17/04/2015
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;
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;
GOSTEI 0
Emerson Nascimento
17/04/2015
utilize um expression parser. há vários. segue um exemplo (gratuito e com fonte):
http://www.sparcs-center.org/expression-parser
http://www.sparcs-center.org/expression-parser
GOSTEI 0