Excusez-moi pour ce long post.

Soit la table suivante (créée pour les besoins de la démonstration) ds une base IB 6.0 SQL 3

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE LFA_LIGNES_FACTURES_2 (
    LFA_PRIX FLOAT,
    LFA_TXREM FLOAT,
    LFA_PRIX_3 DOUBLE PRECISION,
    LFA_TXREM_3 DOUBLE PRECISION,
    LFA_PRIX_2 DECIMAL (9, 2),
    LFA_TXREM_2 DECIMAL (9, 2));
Renseigné avec les valeurs qui suivent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
       LFA_PRIX       LFA_TXREM     LFA_PRIX_3    LFA_TXREM_3     LFA_PRIX_2    LFA_TXREM_2
          10.00            5.40          10.00           5.40          10.00           5.40
          10.00            5.30          10.00           5.30          10.00           5.30
Que donne comme résultat le SQL qui suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
 
  LFA_LIGNES_FACTURES_2.LFA_PRIX *
  ((100 - LFA_LIGNES_FACTURES_2.LFA_TXREM)/ 100) as reel ,
 
  LFA_LIGNES_FACTURES_2.LFA_PRIX_2 *
  ((100 - LFA_LIGNES_FACTURES_2.LFA_TXREM_2)/ 100) as typedecimal,
 
 
  LFA_LIGNES_FACTURES_2.LFA_PRIX_3 *
  ((100 - LFA_LIGNES_FACTURES_2.LFA_TXREM_3)/ 100) as doubleprecision
 
 
FROM
  LFA_LIGNES_FACTURES_2
He ben voilà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
            REEL  TYPEDECIMAL  DOUBLEPRECISION
            9.46        9.40               9.46
            9.47        9.40               9.47
Hé ben, oui, la valeur 5.4 stockée dans un decimal 9.2 est interprété comme un entier à savoir 6.

Je n'ai pas bu, pas fumé ni absorné de substances illicites... C'est un comportement normal, ça ? Pour moi, non ...

En lisant la doc interbase, j'appends que le type décimal 9.2 est stocké comme un entier, mais de là à le considéder comme un entier (arrondi au dessus) pour les calculs, les bras m'en tombent.

Et tout mettre en Double Precision, je veux bien, mais la taille de ma base va être légèrement modifiée....

Une idée pour m'en sortir sans changer tous mes types de données en double précision ?