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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top