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

Bases de données Delphi Discussion :

[PARADOX] Perte de précision avec SQL SUM dans TQuery


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut [PARADOX] Perte de précision avec SQL SUM dans TQuery
    Bonsoir à tous,


    Faire un SELECT SUM(CHAMP) FROM TABLE GROUP BY etc... dans une TQuery pour une table paradox ne donne pas le même résultat que de faire un SELECT CHAMP FROM TABLE et de sommer le champ dans une boucle WHILE la différence est par exemple :

    1) pour SUM : 32456.23
    2) pour WHILE: 32456,24 //est le chiffre exact que je devrais obtenir

    Avec SUM même les fonctions d'arrondis n'ont pas d'effet.
    Le champ est de type CURRENCY
    Il me semble c'est un problème connu car y a des années je suis tombé, enfin si je me souviens bien,
    sur des gens qui en parlent sur les forums es-ce que vous pouvez me confirmer cela SVP ?
    Merci

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    Je pense qu'il s'agit de deux fonctions d'arrondi différentes. L'une qui tronque la décimale, l'autre qui arrondi cette valeur en n'oubliant pas que sous Paradox le nombre flottant (ce qui est le cas de currency) est stocké sur 32 bits. Regardes l'aide sur les fonctions ROUND et FLOOR transposées à la décimale choisie dans ton cas.
    Rappel : Défaut du calcul sur les flottants.
    L'exemple ci-dessous n'est pas particulier à Delphi. Le processeur effectue les calculs en base 2. On sait donc exprimer un demi, un quart, un huitième, etc. soit 1 / 2^n mais on ne sait pas décrire 1/10 ou 1/100 qui sont des nombres incommensurables en base 2. Voilà donc un résultat surprenant. Bien mettre le readln dans l'exemple DOS suivant afin que la valeur de i2 ne soit pas connue au moment de la compilation sinon le compilateur optimise. L'exemple est reproductible avec n'importe quel compilateur ou tableau excel par exemple (voir fichier ci-joint)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      i1, i2: Extended ;
     
    begin
      readln (i2) ;
      i1 := i2 + i2 + i2 + i2 + i2 - 0.05 ;
      writeln (FloatToStr(i1));
      readln ;
    end.
    Entrer la valeur 0.01
    Donc 0.01+0.01+0.01+0.01+0.01-0.05=0
    En fait le résultat donne
    -3.3881317890172E-21 ....
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Bonjour,

    Citation Envoyé par ALWEBER
    Regardes l'aide sur les fonctions ROUND et FLOOR transposées à la décimale choisie dans ton cas.
    Je vais voir ca et merci pour le rappel.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/12/2016, 14h43
  2. DBX perte de connexion avec SQL Server
    Par Higgins dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/12/2013, 12h13
  3. BCP out - in, perte de précision avec option -c ?
    Par dbaprod dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 17/07/2009, 14h19
  4. Réponses: 3
    Dernier message: 01/08/2007, 12h49

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