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 zipado) |
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"
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; |