none
Problema com casas de decimais SQLSERVER RRS feed

  • Pergunta

  • Olá Pessoal, estou com o seguinte problema:

    Eu tenho um campo Float no SQLSERVER, e minha aplicação acessa dados via Entity Framework.

    Quando eu insiro um dado no banco (via objeto do entity) o campo float gera varias casas decimais, sempre com 0,1 amenos ou a. Exemplo:

    Eu insiro 3, no banco fica 3 (CORRETO)

    Eu insiro 3.1 no banco fica 3,0999999999132131 (depois dos noves os valores variam) 

    Eu insiro 3.9 no banco fica 3,90000000001233232 (depois dos noves os valores variam)

    Por que isso acontece ? Como resolver este problema ?

    Obrigado!


    Ao infinito e além!
    quinta-feira, 7 de abril de 2011 20:05

Respostas

  • Amigo, fiz o que você disse e ESTÁ no padrão 53.

    Seguem os campos:

    Espaco float no 8 53    NULL no (n/a) (n/a) NULL
    Repeticao float no 8 53    NULL no (n/a) (n/a) NULL

    O problema continua, acredito que possa ser algo do entity framework, para inserir os dados eu dou um float.parse em um textbox, e o campo do data model está marcado como Single, ja mudei o campo para double, mas não obtive sucesso.

    Obrigado!


    Ao infinito e além!

    Amigo

    Campos do tipo float no sql server sempre irão produzir resultados aproximados. Se vc planejava gravar algum tipo de valor (seja ele qual for) neste campo, sugiro fortemente o uso do tipo decimal, já que ele não "aproxima" o resultado, como o tipo float faz.

    Vc pode ler mais sobre float/decimal, e várias pessoas reclamando do mesmo erro que o seu, neste link

    http://blog.sqlauthority.com/2007/08/29/sql-server-difference-and-explanation-among-decimal-float-and-numeric/

    []s

    • Marcado como Resposta Fabio R. Luz domingo, 10 de abril de 2011 05:58
    sábado, 9 de abril de 2011 18:09

Todas as Respostas

  • Amigo, pode ser que a precisão do seu campo float esteja diferente do padrão 53 http://msdn.microsoft.com/en-us/library/ms173773.aspx

    faça assim: abra o seu sql server, digite:

    use NOMEDOBANCO
    go
    sp_help NOMEDATABELA
    
    verifique se o campo precisão está em 53 para o campo float


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 8 de abril de 2011 11:54
  • Amigo, fiz o que você disse e ESTÁ no padrão 53.

    Seguem os campos:

    Espaco float no 8 53    NULL no (n/a) (n/a) NULL
    Repeticao float no 8 53    NULL no (n/a) (n/a) NULL

    O problema continua, acredito que possa ser algo do entity framework, para inserir os dados eu dou um float.parse em um textbox, e o campo do data model está marcado como Single, ja mudei o campo para double, mas não obtive sucesso.

    Obrigado!


    Ao infinito e além!
    sexta-feira, 8 de abril de 2011 16:00
  • Amigo, fiz o que você disse e ESTÁ no padrão 53.

    Seguem os campos:

    Espaco float no 8 53    NULL no (n/a) (n/a) NULL
    Repeticao float no 8 53    NULL no (n/a) (n/a) NULL

    O problema continua, acredito que possa ser algo do entity framework, para inserir os dados eu dou um float.parse em um textbox, e o campo do data model está marcado como Single, ja mudei o campo para double, mas não obtive sucesso.

    Obrigado!


    Ao infinito e além!

    Amigo

    Campos do tipo float no sql server sempre irão produzir resultados aproximados. Se vc planejava gravar algum tipo de valor (seja ele qual for) neste campo, sugiro fortemente o uso do tipo decimal, já que ele não "aproxima" o resultado, como o tipo float faz.

    Vc pode ler mais sobre float/decimal, e várias pessoas reclamando do mesmo erro que o seu, neste link

    http://blog.sqlauthority.com/2007/08/29/sql-server-difference-and-explanation-among-decimal-float-and-numeric/

    []s

    • Marcado como Resposta Fabio R. Luz domingo, 10 de abril de 2011 05:58
    sábado, 9 de abril de 2011 18:09
  • Obrigado amigo! Resolveu meu problema. Eu cheguei a pensar na possibilidade do float aproximar por característica própia, mas não acreditei que o banco faria isso, porque até então, para mim, isso não teria sentido.... Mas enfim, parece que é assim neh? Então ta^^

    Obrigado!


    Ao infinito e além!
    domingo, 10 de abril de 2011 05:57