Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Outils
Outils Forum d'entraide sur les outils tiers pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2005, 16h32   #1
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Par défaut IBExpert : troncature des double precision ?

Bonjour,

J'utilises IBExpert sur des bases IB6 depuis quelques semaines et il me facilite bien la vie.
Mais, il m'induit en erreur régulièrement avec le nombre de décimales des champs DOUBLE PRECISION qu'il affiche.

Ex :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT CDE_CODRESA,
       CDE_NOENREG,
       CDE_MTTTC,
       (SELECT   SUM(REG_MTENCAIS)
        FROM     REGLEMENTS
        WHERE    REG_NORESA = E.CDE_CODRESA
                 AND REG_NOLIGNE = E.CDE_NOENREG
        GROUP BY REG_NORESA,REG_NOLIGNE) PAYE
FROM   ENTETES_RESA E
WHERE  (SELECT   SUM(REG_MTENCAIS)
        FROM     REGLEMENTS
        WHERE    REG_NORESA = E.CDE_CODRESA
                 AND REG_NOLIGNE = E.CDE_NOENREG
        GROUP BY REG_NORESA,REG_NOLIGNE) <> CDE_MTTTC
Cette requête retourne :
Citation:
CDE_CODRESA CDE_NOENREG CDE_MTTTC PAYE
2809 20 124.38 NULL
2027 20 183.16 183.16
2027 40 183.16 183.16
Le problème ici c'est que pour les 2 dernières lignes CDE_MTTTC = PAYE = 183.16 et donc ces lignes ne devraient pas être retournées.

Ce qui est d'autant plus vrai qu'elles ne sont pas retournées si je fais :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT CDE_CODRESA,
       CDE_NOENREG,
       CDE_MTTTC,
       (SELECT   ROUND( SUM(REG_MTENCAIS), 2 )
        FROM     REGLEMENTS
        WHERE    REG_NORESA = E.CDE_CODRESA
                 AND REG_NOLIGNE = E.CDE_NOENREG
        GROUP BY REG_NORESA,REG_NOLIGNE) PAYE
FROM   ENTETES_RESA E
WHERE  (SELECT   ROUND( SUM(REG_MTENCAIS), 2 )
        FROM     REGLEMENTS
        WHERE    REG_NORESA = E.CDE_CODRESA
                 AND REG_NOLIGNE = E.CDE_NOENREG
        GROUP BY REG_NORESA,REG_NOLIGNE) <> ROUND(CDE_MTTTC, 2)
D'où ma question : est-ce un problème de paramétrage d'IBExpert ? Du type de mes champs ? Un bug de IBExpert ?
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2005, 15h07   #2
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
il est probable que le formatage des valeurs soit liés au paramètres régional de la machine. il faut donc commencer par voir de ce côté.

une autre approche serait de formuler dans la requête elle-même la convertion en chaîne avec "CAST"

mais attention, tous les systèmes windows effectue un arrondi de banquier à l'arrondi le plus proche en fonction des valeurs pair/impair, donc prudence, à contrôler !

cela est du au fait que la plus part des languages utilisent le co-processeur arithmétique et que c'est lui qui procède à ces curieux arrondis parfaitement faux en compta!!!
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h22.


 
 
 
 
Partenaires

Hébergement Web