Em 22/02/13, Carlos Adean<[email protected]> escreveu:
> Caros,
>
> Criei uma função que, dada uma determinada condição, realiza um pequeno
> cálculo. Ao criá-la especifiquei que o return seria float, contudo, ao
> executar \df <função> sua saída exibe que o tipo de retorno e de argumento
> é double precision. Outra coisa que me incomoda está no retorno dos valores
> após a conversão, apresentam 13 algarismos após a vírgula. É possível
> limitar isso ou fazer um arredondamento diretamente na função?
>
> CREATE FUNCTION remap_ra(ra float) RETURNS float AS $$
> DECLARE
> ra ALIAS FOR $1;
> BEGIN
> IF ra > 180
> THEN
> ra = ra - 360;
> RETURN ra;
> ELSE
> RETURN ra;
> END IF;
> END;
> $$
> LANGUAGE plpgsql;
>
> banco=# \df remap_ra
> List of functions
> Schema | Name | Result data type | Argument data types | Type
> --------+----------+------------------+---------------------+--------
> public | remap_ra | double precision | ra double precision | normal
> (1 row)
>
> dados originais sem aplicar a função:
> ra
> ---------
> 315.002
> 315.002
> 315.005
> 315.004
> 315.013
> (5 rows)
>
>
> aplicando a função:
> ra
> -------------------
> -44.9983520507812
> -44.9976806640625
> -44.9952087402344
> -44.9958190917969
> -44.9869689941406
> (5 rows)
>
> Abcs
>


Se você não deseja estas aproximações inerentes à aritmética binária
creio que deveria utilizar o tipo de dados numeric (ou decimal) [1] no
lugar de float.

Osvaldo
[1] http://www.postgresql.org/docs/current/interactive/datatype-numeric.html
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a