O que representa um duplo no sql server?

Eu tenho um par de propriedades em C# que são o double e eu quero armazená-los em uma tabela no SQL Server, mas notei que não há tipo double , então o que é melhor para usar, decimal ou float ?

Isso armazenará valores de latitude e longitude, então eu preciso da precisão mais precisa.

Obrigado pelas respostas até agora.

 float 

Ou se você quiser ir à velha escola:

 real 

Você também pode usar float (53), mas significa o mesmo que float.

(“real” é equivalente a float (24), não float / float (53).)

O tipo decimal do SQL Server (x, y) é para quando você deseja números decimais exatos em vez de ponto flutuante (que podem ser aproximações). Isso está em contraste com o tipo de dados “decimal” do C #, que é mais como um número de ponto flutuante de 128 bits.

Flutuante MSSQL não tem exatamente a mesma precisão que o tipo duplo de 64 bits no .NET (pequena diferença na mantissa IIRC), mas é uma correspondência próxima o suficiente para a maioria dos usos.

Para tornar as coisas mais confusas, um “float” em C # é de apenas 32 bits, portanto, seria mais equivalente em SQL ao tipo real / float (24) em MSSQL que float / float (53).

No seu caso de uso específico … Tudo que você precisa é de 5 posições após o ponto decimal para representar a latitude e a longitude com precisão de cerca de um metro, e você só precisa de até três dígitos antes do ponto decimal para os graus. Float (24) ou decimal (8,5) irá melhor atender às suas necessidades no MSSQL, e usando float em C # é bom o suficiente, você não precisa de duplo. Na verdade, seus usuários provavelmente agradecerão por arredondar para cinco casas decimais em vez de ter um monte de dígitos insignificantes chegando para o passeio.

Aqui estão os mapeamentos de tipo de dados CLR para o SQL Server: http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx

Além disso, aqui está uma boa resposta para o mapeamento de tipo SQL-CLR com um gráfico útil.

A partir desse post (por David ): insira a descrição da imagem aqui

Como a maioria dos outros observou, float é a resposta correta. Consulte a documentação da Microsoft sobre o mapeamento de tipos de dados do SQL Server – CLR para obter mais informações.

float é o equivalente mais próximo.

Enumeração SqlDbType

Editar:

Para Lat / Long como OP mencionado.

Um metro é 1 / 40,000,000 da latitude, 1 segundo é ao redor 30 metros. Flutuante / duplo lhe dão 15 algarismos significativos. Com alguma aritmética mental rápida e duvidosa … os erros de arredondamento / aproximação seriam a duração da parada de preenchimento -> “.”

Você deve mapeá-lo para FLOAT (53) – é o que o LINQ to SQL faz .

float no SQL Server na verdade tem [edit: quase] a precisão de um “double” (em um sentido C #).

float é sinônimo de float(53) . 53 são os bits da mantissa.

O .NET double usa 54 bits para a mantissa.

Há um ótimo encadeamento no MSDN descrevendo a diferença principal entre FLOAT e DECIMAL. Em resumo, Float é aproximado e não pode representar alguns valores.

Olhe para a resposta aceita.

Para o SQL Server:

Tipo decimal é um número assinado de 128 bits Flutuar é um número assinado de 64 bits.

A resposta real é Float , eu estava incorreto sobre decimal.

A razão é que, se você usar um decimal, nunca preencherá 64 bits do tipo decimal.

Embora decimal não dê um erro se você tentar usar um tipo int.

Aqui está um bom gráfico de referência dos tipos.

@ Aquilles Excelente! Veio aqui para o dobro ficou para o TinyInt.

Aqui está um caso de switch parcialmente pronto para converter entre dataTable e SQL:

 switch (columnDataTypeList[i]) { case "System.String": columnDataTypeList[i] = "VARCHAR(MAX)"; break; case "System.Int32": columnDataTypeList[i] = "INT"; break; case "System.DateTime": columnDataTypeList[i] = "DATE"; break; case "System.Double": columnDataTypeList[i] = "FLOAT"; break; } 

A string pode ser um problema, certifique-se de editá-la de acordo com suas necessidades, mas a dupla deve funcionar, que é a questão em mãos.

Parece que você pode escolher. Se você escolher float, poderá perder 11 dígitos de precisão. Se isso for aceitável, vá em frente – aparentemente os projetistas do Linq acharam que isso seria uma boa alternativa.

No entanto, se seu aplicativo precisar desses dígitos extras, use decimal. Decimal (implementado corretamente) é muito mais preciso do que um float de qualquer maneira – nenhuma tradução confusa da base 10 para a base 2 e vice-versa.

Já não existem mapeamentos nas classs System.Data.Sql?

Consulte: C #: equivalentes de tipos de dados do SQL Server no .NET Framework .

Agora, faça o meu flutuar …

Caso isso seja útil, o link abaixo é o que eu geralmente me refiro (acabei neste tópico em um primeiro Google desta vez!).

Ele possui informações adicionais aos links anteriores postados, pois mostra os procedimentos e enumerações do SqlDataReader (além das comparações de tipo .NET e SQL).

http://www.google.com/support

(e sim flutuar!)

Float representa o dobro no SQL server . Você pode encontrar uma prova da codificação em C# no visual studio. Aqui eu declarei Overtime como Float no QL server S QL server e em C# . Assim eu sou capaz de converter

 int diff=4; attendance.OverTime = Convert.ToDouble(diff); 

Aqui OverTime é declarado float type