365 votes

Qu'est-ce qui représente un double dans le serveur sql?

J'ai quelques propriétés dans C# qui sont double et je veux les stocker dans une table dans SQL Server, mais j'ai remarqué qu'il n'y a pas de type double , alors quel est le meilleur usage, decimal ou float ?

Cela va stocker les valeurs de latitude et de longitude, donc j'ai besoin de la précision la plus précise.

Merci pour les réponses jusqu'à présent.

417voto

richardtallent Points 17534
float

Ou si vous voulez aller de la vieille école:

real

Vous pouvez également utiliser float(53), mais il signifie la même chose que le flotteur.

("réel" est équivalent à flotteur(24), pas de flotteur/float(53).)

La virgule(x,y) de type SQL Server est pour quand vous voulez exacte des nombres décimaux plutôt qu'en virgule flottante (qui peuvent être des approximations). Ceci est en contraste avec le C# "décimal" type de données, ce qui est plus comme un cryptage de 128 bits à virgule flottante nombre.

MSSQL flotteur n'ont pas exactement la même précision que le 64 bits double type .NET (légère différence dans la mantisse IIRC), mais c'est assez proche correspondre à la plupart des utilisations.

Pour rendre les choses plus confuses, un "float" en C# n'est que de 32 bits, de sorte qu'il serait plus équivalent en SQL pour le vrai/float(24) type de MSSQL que float/float(53).

Dans votre cas d'utilisation spécifiques... Tous vous avez besoin est de 5 décimales après la virgule pour représenter la latitude et de longitude dans un délai d'environ un mètre de précision, et vous avez seulement besoin jusqu'à trois chiffres avant la virgule pour les degrés. Float(24) ou décimale(8,5) correspondent le mieux à vos besoins en MSSQL, et l'utilisation de float en C# est assez bon, vous n'avez pas besoin de double. En fait, vos utilisateurs vont probablement vous remercier pour l'arrondi à 5 décimales plutôt que d'avoir un tas de chiffres insignifiants à venir le long de la balade.

47voto

Achilles Points 5377

Voici les mappages de type de données CLR à SQL Server: http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx

15voto

gbn Points 197263

float est l'équivalent le plus proche.

SqlDbType Enumération

Modifier:

Pour Lat / Long comme OP mentionné.

Un mètre mesure 1/40 000 000 de latitude, 1 seconde environ 30 mètres. Float / double vous donne 15 chiffres significatifs. Avec une arithmétique mentale rapide et douteuse ... les erreurs d'arrondi / approximation seraient à peu près la longueur de cet arrêt de remplissage -> "."

14voto

Michael Petrotta Points 35647

Comme la plupart des autres l'ont noté, float est la bonne réponse. Pour plus d'informations, consultez la documentation de Microsoft sur le mappage des types de données SQL Server - CLR .

10voto

RichardOD Points 19942

Vous devez le mapper à FLOAT (53) - c'est ce que LINQ to SQL fait .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X