2008-10-29 3 views
4

Je travaille sur une application ASP héritée. Je tente d'insérer une valeur (40.33) dans un champ dans SQL Server 2000 qui se trouve être un type float. Chaque endroit que je peux voir (via une connexion) dans l'application envoie 40.33 à la procédure stockée. Lorsque je cours SQL Profiler contre la base de données pendant que l'appel est en cours, la valeur que je vois dans la trace est 4.033000183105469e + 001L'insertion d'une valeur dans une colonne flottante SQL génère un résultat bizarre.

D'où viennent tous les déchets supplémentaires (le 183105469)?

Pourquoi est-ce que quand je passe en 40 ou 40,25 il n'y a rien de plus?

Est-ce juste un des effets secondaires étranges de l'utilisation du flotteur? Quand j'écris quelque chose, j'utilise normalement de l'argent ou une décimale ou autre chose, donc pas si familier avec le type de données float.

Répondre

8

Oui, il s'agit d'un effet indésirable, bien que well-known, l'utilisation de FLOAT.

Dans Microsoft SQL Server, vous devez utiliser des types de données numériques exacts tels que NUMERIC, DECIMAL, MONEY or SMALLMONEY si vous avez besoin de valeurs numériques exactes avec échelle.

Ne pas utiliser FLOAT.

+0

+1; Je tapais (essentiellement) la même chose. :) –

+0

pas si bizarre vraiment ... à moins que votre arrière-plan de maths soit moins que rigoureux. ;-) Grande réponse –

+0

Quelque chose peut être bizarre sans être inconnu ou inattendu. :-) –

0

Je pense que c'est probablement juste un problème de précision - la partie 0.33 du nombre ne peut pas être représentée exactement en binaire - c'est probablement le plus proche que vous pouvez obtenir.

0

Le problème est que les flotteurs ne sont pas précis à 100%. Si vous avez besoin que vos chiffres soient exacts (en particulier lorsque vous traitez des valeurs monétaires) ... vous devriez utiliser un type décimal.

+0

La décimale n'est pas précise à 100% non plus ... –