RDFormula Versão 2.0
Componente de resolução de Expressões Matemáticas
Avaliação de Expressões e Fórmulas Matemáticas.
Permite criar e montrar fórmulas personalizadas em tempo de execução, oferecendo maior liberdade ao usuário final.
Ideal para customização de Fórmulas para Cálculo de Impostos, Folha de Pagamento etc
Programa demonstração (.exe)
Introdução:

RDFormula Versão 2.0 foi TOTALMENTE reescrito utilizando um novo método RPN (HP) para resolução da expressão, ficando até 10x mais rápida que a versão 1.0.


Novidades:

Compatibilidade com Delphi XE-XE7

FUNÇÃO DIV, retorna o inteiro da divisão

FUNÇÃO INVERTE, inverte o valor da variavel ou resultado, o mesmo que (valor * -1)

FUNÇÃO EXECUTE agora retorna TRUE / FALSE caso tenho ocorrido algum erro.

Variavel LASTERROR mostra o último erro encontrado na execução da expressão.

Novo Método de resolução, em alguns casos com uso de variável do usuário chega a ficar até 10x mais rápido


Caracteristicas:
• Suporte ilimitado ao números de variáveis definidas pelo usuário
• Validação da Expressão, retornando uma mensagem de erro.
• Operações básicas, expressões e funções trigonométricas.

Operadores Descrição Exemplo:
+ Adição 8 + 2 = 10
- Subtracao 8 - 2 = 6
* Multiplicação 8 * 2 = 16
/ Divisão 8 / 2 = 4
^ Exponencial 8^2 = 64 (Base deve ser Positiva)
() Parenteses (8+2) / 2 = 5 é diferente 8+2 / 2 = 9
MOD Resto da divisão 10 MOD 3 = 1 (somente inteiros)
DIV Inteiro da divisão 10 DIV 3 = 3 (somente inteiros)
ABS Valor Absoluto ABS(10 -12) = 2 ABS(10 - 8) = 2
ROUND Arredonda Round(11/3) = 4 senão 3.6666
TRUNC Trunca valor Trunc(11 /3) = 3
SIN Função Seno
COS Função Coseno
ATAN Função Tangente
EXP Exponencial Exp(2) (inverso da LN)
LN Logaritimo Nataral Log(10)
SQRT Raiz Quadrada SQRT(16) = 4
SQR Quadrado SQR(2) = 4 (o mesmo que x*x)
INVERTE Inverte valor INVERTE(X) = -X (o mesmo que x * -1)

Calculando uma EXPRESSÃO:

Para calcular o valor de uma expressão, coloque-a na propriedade "EXPRESSAO" e chame a função EXECUTE.


Exemplo:
RDFormula1.Expressao := '(18 * 8) / 2';
RDFormula1.Execute;
if RDFormula1.Falhou then    // é TRUE se houve falha na execução...
    Showmessage(RDFormula1.LastError)
else
    Showmessage('O resultado é ' + FloatToStrF(RDFormula1.Resultado, ffGeneral,  18, 2);

Variáveis definidas pelo Usuário:

Se for utilizar variáveis definidas pelo usuário, então você deve alimentar os valores correspondentes no evento "OnVariavel"


1) Este evento procura pelo valor de uma VARIAVEL encontrada na fórmula
2) Todas as variaveis possíveis de serem utilizadas na expressão, devem estar relacionadas aqui e com seus devidos valores fixos ou variáveis, campo de arquivo etc.
3) O VALUE representa o valor que deve ser válido
4) VARNAME é o nome da variavel encontrada na expressão. Para evitar erros use UPPERCASE ou LOWERCASE para converter o VARNAME
5) FOUND é uma variavel do tipo boolean, você deve validar se o valor de VARNAME foi encontrado (TRUE) ou não (FALSE)

Exemplo:

Procedure TForm1.RDFormula1Variavel(Sender: TObject; VarName : String;
var Value : Extended; var Found : Boolean);
begin
Found   := True;

// Transforme tudo pra Maiusculo para evitar case sensitive...
VarName := Uppercase(VarName);

// Valores Fixos...
if (VarName = 'SALARIO')     then  Value := 181   else
 if (VarName = 'DIAMES')      then  Value := 30    else
  if (VarName = 'DIASEMANA')   then  Value := 7     else
   if (VarName = 'BANANA')      then  Value := 1.85  else
    if (VarName = 'LARANJA')     then  Value := 2.50  else
     if (VarName = 'UVA')         then  Value := 5.00  else
      if (VarName = 'DIAS')        then  Value := STRTOINT(DIAS.TEXT) else
       if (VarName = 'QUANTIDADE')  then  Value := STRTOINT(QUANTIDADE.TEXT) else
          Found := False;   // Se nao achou o valor mode FALSE para FOUND
          end;

MENSAGEM

TEXTO