[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