Inserir um valor em uma coluna SQL flutuador gera um resultado estranho
-
05-07-2019 - |
Pergunta
Eu estou trabalhando em um aplicativo ASP legado. Eu estou tentando inserir um valor (40.33) em um campo no SQL Server 2000 que passa a ser um tipo float. Todo lugar que eu posso ver (através de algum logging) na aplicação está enviando 40.33 para o procedimento armazenado. Quando eu executar o SQL Profiler contra o banco de dados enquanto a chamada está acontecendo, o valor que eu vejo no rastreamento é 4.033000183105469e + 001
Onde está todo o lixo adicional vindo (a 183.105.469)?
Por que é que quando eu passar em 40, ou 40,25 não há nada extra?
É este um pouco dos efeitos colaterais estranhos de usar bóia? Quando estou escrevendo algo que eu normalmente usam dinheiro ou decimal ou outra coisa, por isso não familiarizado com o tipo de dados float.
Solução
Sim, este é um estranho, embora conhecido , efeito colateral do uso FLOAT.
Em Microsoft SQL Server, você deve usar tipos de dados exata numéricos, como NUMERIC, DECIMAL , DINHEIRO ou smallmoney se você necessidade exata numéricos com escala.
Não use float.
Outras dicas
Eu acho que isso é provavelmente apenas uma questão de precisão - a 0,33 parte do número não pode ser representado exatamente em binário -. Esta é provavelmente o mais próximo que você pode chegar a
O problema é que carros alegóricos não são 100% exato. Se você precisar de seus números para ser exato (especialmente quando se lida com valores monetários) ... você deve usar um tipo Decimal.