L'insertion d'une valeur dans une colonne flottante SQL génère un résultat étrange

StackOverflow https://stackoverflow.com/questions/248122

  •  05-07-2019
  •  | 
  •  

Question

Je travaille sur une ancienne application ASP. J'essaie d'insérer une valeur (40.33) dans un champ de SQL Server 2000 qui est un type flottant. Chaque endroit que je peux voir (via une journalisation) dans l'application envoie 40.33 à la procédure stockée. Lorsque j'exécute SQL Profiler sur la base de données pendant l'appel, la valeur visible dans la trace est 4.033000183105469e + 001

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

Pourquoi est-ce que quand je passe dans 40 ou 40,25 il n’ya rien de plus?

N’est-ce qu’un des effets secondaires étranges de l’utilisation de float? Lorsque j'écris quelque chose, j'utilise normalement de l'argent, des décimales ou autre chose, donc je ne connais pas très bien le type de données float.

Était-ce utile?

La solution

Oui, c’est étrange, bien que bien connu , effet secondaire de l'utilisation FLOTTEUR.

Dans Microsoft SQL Server, vous devez utiliser des types de données numériques exacts, tels que NUMERIC, DECIMAL , MONNAIE ou PETITMONEY si vous avez besoin de chiffres exacts avec échelle.

N'utilisez pas FLOAT.

Autres conseils

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 auquel vous pouvez accéder.

Le problème est que les flottants ne sont pas précis à 100%. Si vous souhaitez que vos chiffres soient exacts (en particulier pour les valeurs monétaires), vous devez utiliser un type décimal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top