2009-07-29 4 views
3

La perte de précision est une chose, mais le gain de précision ???SQL Server apporte une précision supplémentaire pour les flottants?

Je dispose d'un fichier texte avec/les coordonnées suivantes:

41.88694340165634 -87.60841369628906 

Quand je coller dans la vue tableau Mgmt SQL Server Management Studio, il en résulte ceci:

41.886943401656339 -87.608413696289062 

Suis-je en train de rêver? Comment est-ce possible? Je colle à partir du bloc-notes et c'est du texte brut. Même problème si je tape les caractères directement.

D'où le serveur sql obtient-il la précision supplémentaire?

+2

S'il s'agit de coordonnées de latitude et de longitude sur une planète de la taille de la terre, la distance entre ces emplacements est d'environ 1 nanomètre. (Cela dit, dans le cas où cela a de l'importance pour votre application, @GMastros et @Hova sont corrects.) –

Répondre

3

Selon Livres-On-Line:

Float: types de données Nombre approximatif pour une utilisation avec des données numériques à virgule flottante. Les données du point flottant sont approximatives; par conséquent, toutes les valeurs de la plage de types de données ne peuvent pas être représentées exactement.

Emphasis mine.

+0

vous manquez le point de la question .. c'est la précision de l'ajout, pas la soustraire. Où pourrait-il être possible d'obtenir les décimales supplémentaires? C'est juste en train de les tirer du ciel. – Scott

+0

@Scott Un flotteur ne peut pas contenir EXACTEMENT 41.88694340165634, donc le flotteur devient quelque chose de proche tel que 41.886943401656339. –

1

Je n'ai pas personnellement vu cela, mais il se peut que le studio de gestion de serveur SQL montre la "représentation" du flottant, c'est-à-dire comment la valeur serait stockée dans la base de données. Rappelez-vous que les flotteurs sont tous approximatifs de toute façon.

+0

mais cela expliquerait le phénomène de perte de précision, pas de précision ADDITION. – Scott

+1

Pas vraiment. Comme le souligne @hova, ce n'est pas la précision en soi. C'est à voir avec la façon dont les flotteurs sont stockés. Puisque 41.88694340165634 ne peut pas être stocké dans les bits disponibles pour un flottant, il stocke la représentation aviable la plus proche. Jetez un coup d'oeil ici pour comprendre comment les flotteurs sont représentés en interne: http://steve.hollasch.net/cgindex/coding/ieeefloat.html – nagul

+0

Considérons une situation hypothétique: Supposons que 1.0 ne peut pas être stocké dans les bits x un flaot hypothétique a . Que pouvons-nous faire alors? Nous pouvons stocker le nombre le plus proche de 1 qui peut être mis dans un flaot, qui serait 0,99999 ou 0,999 ou 0,9 ou 1,000001 ou une autre approximation de ce type. La chose importante ici est que nous n'allons pas augmenter la précision, en stockant simplement la valeur la plus proche de 1,0 que nous pouvons. Par conséquent, flaot est un type de données "approximatif", identique à float. – nagul

6

Cela n'ajoute pas de précision, il suffit de l'arrondir à la représentation à virgule flottante IEEE la plus proche. Lorsque vous convertissez ce retour en décimal, il ne semble que gagner en précision.

+0

merci pour les idées, a un sens maintenant. – Scott

Questions connexes