[firebase-br] Truncar valor Firebird 2.0

Tecnobyte Informática temp2 em tecnobyte.com.br
Ter Jul 19 16:43:47 -03 2011


Boa tarde

Escrevi um procedimento que talvez resolva seu problema:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_Trunc(FloatValue DOUBLE PRECISION, Decimals 
SMALLINT)
RETURNS(Result DOUBLE PRECISION) AS
DECLARE VARIABLE StrValue VARCHAR(50);
DECLARE VARIABLE StrInt VARCHAR(50);
DECLARE VARIABLE StrFrac VARCHAR(50);
DECLARE VARIABLE AfterSep SMALLINT;
DECLARE VARIABLE DecCount SMALLINT;
BEGIN
  IF (FloatValue IS NULL) THEN
    Result = NULL;
  ELSE
  BEGIN
    StrValue = FloatValue;
    StrInt = '';
    StrFrac = '';
    AfterSep = 0;
    DecCount = 0;
    WHILE (StrValue <> '') DO
    BEGIN
      IF (SUBSTRING(StrValue FROM 1 FOR 1) = '.') THEN
        AfterSep = 1;
      ELSE
      BEGIN
        IF (AfterSep = 0) THEN
          StrInt = StrInt || SUBSTRING(StrValue FROM 1 FOR 1);
        ELSE IF (DecCount >= Decimals) THEN
          BREAK;
        ELSE
        BEGIN
          StrFrac = StrFrac || SUBSTRING(StrValue FROM 1 FOR 1);
          DecCount = DecCount + 1;
        END
      END
      StrValue = SUBSTRING(StrValue FROM 2 FOR 50);
      SUSPEND;
    END
    Result = StrInt || '.' || StrFrac;
  END
  SUSPEND;
END^

SELECT * FROM SP_Trunc(1.666, 2); /* Result: 1.66 */


Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br

-----Mensagem Original----- 
From: Hélio Oliveira
Sent: Tuesday, July 19, 2011 11:49 AM
To: lista em firebase.com.br
Subject: [firebase-br] Truncar valor Firebird 2.0

Boa tarde Colegas!

Como posso truncar um valor no Fire 2.0 já que só temos a função TRUNC
nativa no Firebird 2.1 em diante. Tenho como exemplo o resultado de uma
operação feita em um SP que é 3.777,725 e eu gostaria de obter apenas
3.777,72 ou seja desprezar da terceira casa decimal em diante.

A variável que recebe o resultado desta operação é do tipo double precision.


-- 
[]'s,

Hélio Oliveira
Bel. Ciência da Computação
Técnico em Contabilidade
e-mail : hpensador em gmail.com
Skype : hpensador
http://hpensador.blogspot.com/
www.hpensador.net
(71) 9975-9176





Mais detalhes sobre a lista de discussão lista