-
Arrondis avec une somme
bonjour,
J'ai un problème d'arrondi sur un calcul d'une somme sous sqlserveur express 2008.
J'ai une table T1 avec une champ 'IDPere' et un champs flottant 'Qte'.
Code:
select Qte from T1 where IDPere = 1
ceci me retourne 489,2
mais si je fais
Code:
select sum(Qte) from T1 where IDPere = 1
celui-ci me retourne 489,200012207031.
Il n'y a bien qu'une ligne dans la table.
La fonction sum a-t-elle un problème d'arrondi en sqlserver? comment contourner ce problème sachant que j'utilise 5 digits après la virgule ?
merci de vos commentaires
-
Bonjour,
Quel est le type de données de la colonne Qte ?
Cordialement,
Arkhena
-
Comme je l'ai mis dans le premier post, c'est une flottant de type real.
-
Le type real n'est pas un type de données précis.
Utilisez plutot un type tel que décimal/numeric et cela devra deja vous aider en grande partie.
-
D'accord avec Ptit Dje.
Je complète la réponse avec la doc : http://msdn.microsoft.com/fr-fr/library/ms187752.aspx
Les réels sont à classer dans les types de données approximatifs, d'où les différences remarquées...
-
Il est assez difficile de modifier le type dans un programme en place depuis un long moment.
Pour mon cas, je vais me contenter d'arrondir un peu plus dans le code (3 au lieu de 5 après la virgule).
Il faudrait au moins que je puisse passer du type real (précision de 7, 4 octets) au type float(précision de 15, 8 octets) ce qui me permettrait de voir un peu plus loin en précision.
Pour d'autres projets, je passerai par des numeric ou decimal.