none
Tipo de dados float RRS feed

  • Pergunta

  • Olá amigos,

    Tenho uma tabela cujo um determinado campo é do tipo float.
    Gostaria de saber, porque o campo grava o valor de 120.1999999999999 quando eu o atualizo com 120.20?

    Nesse caso citado, se eu fizer um select com uma where campo_tal >= 120.20 o valor acima aparece (dando a entender que apenas uma "forma de exibição do banco").
    Porém tem outros casos, como por exemplo o valor 180.2 que foi gravado com 180.19999999999996
    e se eu fizer uma where com campo_tal >= 180.2 ele não aparece (observe que o ultimo dígito é um 6 e não 9 como o exemplo anterior).

    Mesmo fazendo um round antes de gravar o campo esse "sintoma" continua.

    Porque isso acontece? O tipo float guarda um valor aproximando?

    Utilizado o MSSQL 2000 e 2005.

    Leandro.
    Tytto
    quinta-feira, 12 de março de 2009 11:14

Todas as Respostas

  • Tytto,

    Este é um procedimento natural do datatype float, por padrão a sua forma de arredondamento de valores é composta por 15 casas decimais, mas sua precisão matemática é inferior ao numeric e decimal.

    Quando um dado é armazenado neste campo o SQL Server dependendo do valor vai utilizar esta estrutura de armazenamento.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 12 de março de 2009 12:43