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
Renseigné avec les valeurs qui suivent :
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));
Que donne comme résultat le SQL qui suit :
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
He ben voilà :
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
Hé ben, oui, la valeur 5.4 stockée dans un decimal 9.2 est interprété comme un entier à savoir 6.
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
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 ?
Partager