¿Qué representa un doble en el servidor SQL?

Resuelto Xaisoft asked hace 15 años • 8 respuestas

Tengo un par de propiedades en C#las que están doubley quiero almacenarlas en una tabla en SQL Server, pero noté que no hay ningún doubletipo, entonces, ¿qué es mejor usar decimalo float?

Esto almacenará los valores de latitud y longitud, por lo que necesito la precisión más precisa.

Gracias por las respuestas hasta el momento.

Xaisoft avatar Jul 31 '09 03:07 Xaisoft
Aceptado
float

O si quieres ir a la vieja escuela:

real

También puedes usar float(53), pero significa lo mismo que float.

("real" es equivalente a float(24), no float/float(53).)

El tipo de SQL Server decimal(x,y) es para cuando desea números decimales exactos en lugar de punto flotante (que pueden ser aproximaciones). Esto contrasta con el tipo de datos "decimal" de C#, que se parece más a un número de punto flotante de 128 bits.

El tipo flotante de MSSQL es equivalente al tipo doble de 64 bits en .NET. (Mi respuesta original de 2011 decía que podría haber una ligera diferencia en la mantisa, pero lo probé en 2020 y parecen ser 100% compatibles en su representación binaria de números muy pequeños y muy grandes; consulte https:// /dotnetfiddle.net/wLX5Ox para mi prueba).

Para hacer las cosas más confusas, un "float" en C# es sólo de 32 bits, por lo que sería más equivalente en SQL al tipo real/float(24) en MSSQL que float/float(53).

En su caso de uso específico... Todo lo que necesita son 5 lugares después del punto decimal para representar la latitud y la longitud con una precisión de aproximadamente un metro, y solo necesita hasta tres dígitos antes del punto decimal para los grados. Float(24) o decimal(8,5) se adaptarán mejor a sus necesidades en MSSQL, y usar float en C# es suficiente, no necesita el doble. De hecho, sus usuarios probablemente le agradecerán que redondee a 5 decimales en lugar de tener un montón de dígitos insignificantes en el camino.

richardtallent avatar Jul 30 '2009 20:07 richardtallent

Además, aquí hay una buena respuesta para el mapeo de tipos SQL-CLR con un gráfico útil.

De esa publicación (por David ): ingrese la descripción de la imagen aquí

Mazdak Shojaie avatar Jul 20 '2015 10:07 Mazdak Shojaie

Debe asignarlo a FLOAT(53); eso es lo que hace LINQ to SQL .

RichardOD avatar Jul 30 '2009 20:07 RichardOD