IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Utilisation de SUM() sur des 'real'


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Utilisation de SUM() sur des 'real'
    Bonjour.
    J'ai remarqué une bizarrerie lors d'une utilisation de la fonction SUM().
    J'ai une vue qui affiche le SUM() d'une colone de type real, seulement quand je regarde le résultat, les décimales s'embalent et donnent des résultat avec des chiffres abérants. Par exemple au lieu d'obtenir 7,2 comme résultat, j'ai 7,19999980926514.
    En cherchant un peu j'ai découvert que SUM() renvoyait une valeur de type float. Le problème viendrait il de la conversion real -> float ?
    Je n'y comprends rien du tout alors si quelqu'un pourait m'expliquer svp.
    Merci d'avance.

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Les operations sur les float ou les reels conduit TOUJOURS à une imprecision sur les décimales; normal, car les nombres de ce type sont stockés "à perte" en mémoire, par là je veux dire que jamais tu n'as la valeur exacte ( composé d'une infinité de décimales ) en mémoire.

    Il faut donc procéder à un arrondi, un ceil ou un floor, en fonction des besoins de ton applications.

    A+
    K

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Mais si je fait un CEIL ou un FLOR je perds mes décimales or dans ce champ je rentre des prix (avec des centimes donc), il m'est donc impossible de 'perdre' ces décimales.

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    K

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai testé autre chose, j'ai fait un CAST de la somme en type real -> CAST(SUM(col) AS real) et j'arrive a une valeur exacte (je n'ai pas controlé tout les enregistrements, il y en a trop).
    D'apres toi est-ce judicieux de faire cela ou vaut-il mieux utiliser ROUND comme tu l'a suggéré ?

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Je n'en sais rien, désolé, mais en terme de performance, je ne pense pas qu'il y ait grande différence, étant donné que tu appliques le CAST sur un SUM ( donc il ne sera appliqué qu'une fois ).

    Par contre, si tu faisais la même chose dans une requête... Je pense que ça serait lent...

    A+
    K

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Bon je vais faire plusieurs essai pour voir les différences.
    En tout cas je te remercie pour tes réponses plus que rapides
    Bon WE.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SUM sur des DATETIME pour calculer durée
    Par cana13 dans le forum Développement
    Réponses: 7
    Dernier message: 10/06/2009, 15h10
  2. Réponses: 8
    Dernier message: 13/11/2008, 21h28
  3. Réponses: 16
    Dernier message: 12/11/2008, 20h36
  4. utilisations de pointeurs sur des objets
    Par niarkyzator dans le forum Delphi
    Réponses: 21
    Dernier message: 13/12/2006, 09h42
  5. [RegEx] utilisation de preg_replace sur des balises
    Par Kerod dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo