Em Quinta 11 Janeiro 2007 15:17, Evandro Ricardo Silvestre escreveu:
> Salve!
>
> CREATE TABLE estoque_teste (
>    co_item           float8 NOT NULL,
>    co_estoque        float8 NOT NULL,
>    qt_estoque        float8 NOT NULL,
>    PRIMARY KEY(co_item));
>
> INSERT INTO estoque_teste(co_item,co_estoque,qt_estoque) VALUES(1,1,150.5)
> UPDATE estoque_teste SET qt_estoque = qt_estoque - 150.4;
>
> SELECT * FROM estoque_teste
>
> O valor do campo qt_estoque, ao invés de ser 0.01 ficou 0,0999999999999943.
>
> Se o UPDATE for dessa maneira: UPDATE estoque_teste SET qt_estoque =
> qt_estoque::numeric - 150.4;
>
> O valor do campo fica correto, mas o CAST para numeric não é a forma
> correta de solucionar o problema.
> Imagino que seja algum problema de arredondamento e não sei se é
> possível definir a forma como o Postgresql arredonda.
>
>
> Não gostaria de mudar o tipo de dados da tabela, ela já esta alimentada
> e é muito grande!
>
> Fiz o teste nas versões 7.4.2 e 8.2. Em nenhum deu certo!
>
>
> Se alguém souber de algo ficarei grato
Evandro, 

vc pode definir o arredondamento no campo desta forma vc nao vai 
ter este tipo de problema.

Tente substituir 
    qt_estoque        float8 NOT NULL,
por 
     qt_estoque       decimal( 14, 4 ) not null


---------------
 CREATE TABLE estoque_teste (
    co_item           float8 NOT NULL,
    co_estoque        float8 NOT NULL,
    qt_estoque        decimal( 14, 4 ) NOT NULL,
    PRIMARY KEY(co_item));

note que a quantidade de casas decimais pode 
variar de acordo com seu gosto..! 


Abraços

Eloir Meneguete
[EMAIL PROTECTED]
Linux User 132780
Apucarana - Pr.
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a