[firebase-br] Solução
Hélio Oliveira
hpensador em gmail.com
Qui Jul 18 09:12:29 -03 2013
Bom dia Colegas!
Uma amiga me passou a SP_Trunc a qual não sei de quem é autoria para
dar os creditos. A mesma tinha um erro o qual corrigi e replico a mesma
aqui para caso alguém precise.
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);
END
Result = StrInt || '.' || StrFrac;
END
SUSPEND;
END
Hélio Oliveira wrote on 17/07/2013 :
> Boa tarde Colegas!
>
> Preciso truncar o valor de uma operação em uma SP no Firebird 2.0 sem fazer
> uso de UDF.
>
> x = (a * b);
> x deve receber o valor truncado da operação de a * b, ignorando a partir da
> 3ª casa decimal.
>
> Exemplo: x = (745,50 * 0,21) = 156,555 preciso que x receba 156,55 e não
> 156,56
>
> [ ]'s,
>
> Hélio Oliveira
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista