Firebird: Calculando Parcelas com dizimas

0

Posted on : 18-07-2012 | By : Paulo H Oliveira | In : Banco de Dados, Firebird

Sempre precisamos calcular parcelas de um valor total o qual, as vezes, não fecha o valor 100%, faltando 1 centavo ou mais, para resolver isso segue abaixo um exemplo:

--CREATE OR ALTER PROCEDURE SP_CALCULA_PARCELA(PVALORTOTAL NUMERIC(15,6), PQTDEPARCELAS INTEGER)
EXECUTE BLOCK
RETURNS (RVALORPARCELA NUMERIC(15,2))
AS
DECLARE VARIABLE PVALORTOTAL NUMERIC(15,2);
DECLARE VARIABLE PQTDEPARCELAS INTEGER;
 
DECLARE VARIABLE VVLR_PARCELAS NUMERIC(15,2);
DECLARE VARIABLE VAUXILIAR NUMERIC(15,2);
DECLARE VARIABLE VQTDEPARCELAS INTEGER;
DECLARE VARIABLE VINCPARCELAS INTEGER;
DECLARE VARIABLE VSOMAPARCELAS NUMERIC(15,2);
BEGIN
  PVALORTOTAL = 1000;
  PQTDEPARCELAS = 3;
 
  VSOMAPARCELAS = 0;
  VINCPARCELAS = 1;
  VVLR_PARCELAS = (PVALORTOTAL/PQTDEPARCELAS);
  WHILE (:VINCPARCELAS <= :PQTDEPARCELAS) DO
  BEGIN
    IF (:VINCPARCELAS = :PQTDEPARCELAS) THEN
    BEGIN
      VAUXILIAR = PVALORTOTAL - VSOMAPARCELAS;
      RVALORPARCELA = ROUND(VAUXILIAR,2);
    END
    ELSE
    BEGIN
      VSOMAPARCELAS = :VSOMAPARCELAS + VVLR_PARCELAS;
      RVALORPARCELA = ROUND(VVLR_PARCELAS,2);
    END
    VINCPARCELAS = :VINCPARCELAS +1;
    SUSPEND;
  END
END

Compartilhe :

  • Stumble upon
  • twitter

Escreva um comentário

Security Code: