[firebase-br] Truncar valor Firebird 2.0

Fernando Gutierres fernando em onclicksistemas.com.br
Ter Jul 19 17:16:23 -03 2011


Como o amigo anteriormente disse, basta dividir por 10 e multiplicar por 10.
Faça o teste

select CAST(3777.725/10*10 AS NUMERIC(18,2)) from rdb$database

2011/7/19 Tecnobyte Informática <temp2 em tecnobyte.com.br>:
> 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
>
>
> ______________________________________________
> 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
>



-- 
Grato.

Fernando Gutierres Damaceno
Analista Programador

www.onclick.com.br




Mais detalhes sobre a lista de discussão lista