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?
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