[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