Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Somme non arrondie dans un pied d'état [Access 97]

4 réponses
Avatar
Dom
Bonjour,

Dans un pied d'état, j'ai une somme des différents montants de la section
détail. Les champs sont de type monétaire avec deux décimales. A priori, pas
de problèmes, mais..., car il y a un mais...

Quand dans la section détail, on n'a que des nombres avec des décimales se
terminant par 0 ou 5, le total affiché dans le pied d'état est
rigoureusement correct. En revanche, quand dans cette même section, on a des
nombres avec des décimales autres (1,2,3,4,6,7,8,9), le total affiché
diffère parfois d'un centime en plus ou en moins selon le cas avec le total
exact (calculé avec une bonne vieille machine à calculer doté d'un rouleau
chiffrier !). Parfois aussi, cela tombe pile-poil !

Ai-je la berlue ou suis-je tombé sur un bug d'Access ? On dirait qu'Access
(en tout cas la version 97) arrondit automatiquement les nombres dans un
total et selon une logique qui m'échappe quelque peu...

Est-ce quelqu'un fréquentant cet admirable forum pourrait m'éclairer ?

Merci d'avance et bon week-end.

Dominique

4 réponses

Avatar
Richard_35
Bonjour Dom,

Comment est calculé ton montant des lignes "détail" ?
Ne serait-ce pas une multiplication d'une quantité par un prix unitaire, ou
un truc du genre ?
Si oui, quel est le format de ces 2 champs ?

A bientôt,
Richard.

"Dom" a écrit dans le message de news:
46a1d22c$0$24676$
Bonjour,

Dans un pied d'état, j'ai une somme des différents montants de la section
détail. Les champs sont de type monétaire avec deux décimales. A priori,
pas de problèmes, mais..., car il y a un mais...

Quand dans la section détail, on n'a que des nombres avec des décimales se
terminant par 0 ou 5, le total affiché dans le pied d'état est
rigoureusement correct. En revanche, quand dans cette même section, on a
des nombres avec des décimales autres (1,2,3,4,6,7,8,9), le total affiché
diffère parfois d'un centime en plus ou en moins selon le cas avec le
total exact (calculé avec une bonne vieille machine à calculer doté d'un
rouleau chiffrier !). Parfois aussi, cela tombe pile-poil !

Ai-je la berlue ou suis-je tombé sur un bug d'Access ? On dirait qu'Access
(en tout cas la version 97) arrondit automatiquement les nombres dans un
total et selon une logique qui m'échappe quelque peu...

Est-ce quelqu'un fréquentant cet admirable forum pourrait m'éclairer ?

Merci d'avance et bon week-end.

Dominique



Avatar
pgz
Bonjour.

Es-tu sûr que tes variables soient définies avec 2 décimales? Attention les
monétaires en ont 4. Le format permet de n'en afficher que 2 mais la variable
garde les 4. Du coup dans un addition, on peut récupérer un cent par ci, un
cent par là.
Si les valeurs de détails sont calculées, ajouter un round(..., 2), seule
façon d'être sûr de n'avoir que 2 décimales.
Je ne crois pas qu'il y ait là un bug d'access.

Bon courage,
--
pgz

"Ce qui se conçoit mal s''''''''énonce péniblement et les mots pour le dire
arrivent péniblement." - dicomoche.net
_____________________________
pgz.conseil at orange.fr



Bonjour,

Dans un pied d'état, j'ai une somme des différents montants de la section
détail. Les champs sont de type monétaire avec deux décimales. A priori, pas
de problèmes, mais..., car il y a un mais...

Quand dans la section détail, on n'a que des nombres avec des décimales se
terminant par 0 ou 5, le total affiché dans le pied d'état est
rigoureusement correct. En revanche, quand dans cette même section, on a des
nombres avec des décimales autres (1,2,3,4,6,7,8,9), le total affiché
diffère parfois d'un centime en plus ou en moins selon le cas avec le total
exact (calculé avec une bonne vieille machine à calculer doté d'un rouleau
chiffrier !). Parfois aussi, cela tombe pile-poil !

Ai-je la berlue ou suis-je tombé sur un bug d'Access ? On dirait qu'Access
(en tout cas la version 97) arrondit automatiquement les nombres dans un
total et selon une logique qui m'échappe quelque peu...

Est-ce quelqu'un fréquentant cet admirable forum pourrait m'éclairer ?

Merci d'avance et bon week-end.

Dominique





Avatar
Dom
Bonsoir,

Après moultes recherches, prises de têtes..., et du code trouvé ça et là,
je pense avoir résolu mon problème. Je teste sur plusieurs bases pendant 15
jours, et dans tous les cas, je vous tiendrai informés.

Cordialement,

Dominique.

"Dom" a écrit dans le message de news:
46a1d22c$0$24676$
Bonjour,

Dans un pied d'état, j'ai une somme des différents montants de la section
détail. Les champs sont de type monétaire avec deux décimales. A priori,
pas de problèmes, mais..., car il y a un mais...

Quand dans la section détail, on n'a que des nombres avec des décimales se
terminant par 0 ou 5, le total affiché dans le pied d'état est
rigoureusement correct. En revanche, quand dans cette même section, on a
des nombres avec des décimales autres (1,2,3,4,6,7,8,9), le total affiché
diffère parfois d'un centime en plus ou en moins selon le cas avec le
total exact (calculé avec une bonne vieille machine à calculer doté d'un
rouleau chiffrier !). Parfois aussi, cela tombe pile-poil !

Ai-je la berlue ou suis-je tombé sur un bug d'Access ? On dirait qu'Access
(en tout cas la version 97) arrondit automatiquement les nombres dans un
total et selon une logique qui m'échappe quelque peu...

Est-ce quelqu'un fréquentant cet admirable forum pourrait m'éclairer ?

Merci d'avance et bon week-end.

Dominique



Avatar
Dom
Bonjour,

Voici comment j'ai procédé :

1) Dans ma table principale (TERM avec 5111 enregistrements) création de 3
champs numériques,réel double, sans format, avec 2 décimales.
Test1
Test2
Test3
Le champ numérique (format monétaire, 2 décimales) qui contient les données
s'appelle : DEBITS. Les données sont positives ou négatives

2) Création de requêtes Mise à jour à exécuter dans cet ordre

- UPDATE TERM SET TERM.Test1 = Int(Abs([DEBITS]));
- UPDATE TERM SET TERM.Test1 = [Test1]*-1 WHERE (((TERM.DEBITS)<0));
- UPDATE TERM SET TERM.Test2 = [DEBITS]-[Test1];
- UPDATE TERM SET TERM.Test2 = [Test2]+0.001 WHERE (((TERM.Test2)>0));
- UPDATE TERM SET TERM.Test2 = [Test2]-0.001 WHERE (((TERM.Test2)<0));
- UPDATE TERM SET TERM.Test2 = Roundinf([Test2],"2");

'Fonction Roundif arrondi inférieur'
Public Function Roundinf(n As Double, e As Long) As Double
Roundinf = Fix((10 ^ e) * n) / (10 ^ e)
End Function

- UPDATE TERM SET TERM.Test3 = [Test1]+[Test2] WHERE (((TERM.Test1)>0));
- UPDATE TERM SET TERM.Test3 = [Test1]+[Test2] WHERE (((TERM.Test1)<0));

3) Dans mon pied d'état, le champ "Total Général" est égal à :
=Somme([Test3]) (au format monétaire), ce qui donne : 302 019 307,36 euros
(et ce qui est rigoureusement exact !), alors que si je fais la somme du
champ [DEBITS], j'obtiens 302 019 310,86 euros, soit un arrondi supérieur de
3,50 euros !!!

J'ai testé sur une bonne trentaine de bases, et à défaut d'être élégant,
cela fonctionne :-)))

Cordialement,

Dominique



"Dom" a écrit dans le message de news:
46a4eb93$0$19751$
Bonsoir,

Après moultes recherches, prises de têtes..., et du code trouvé ça et là,
je pense avoir résolu mon problème. Je teste sur plusieurs bases pendant
15 jours, et dans tous les cas, je vous tiendrai informés.

Cordialement,

Dominique.

"Dom" a écrit dans le message de news:
46a1d22c$0$24676$
Bonjour,

Dans un pied d'état, j'ai une somme des différents montants de la section
détail. Les champs sont de type monétaire avec deux décimales. A priori,
pas de problèmes, mais..., car il y a un mais...

Quand dans la section détail, on n'a que des nombres avec des décimales
se terminant par 0 ou 5, le total affiché dans le pied d'état est
rigoureusement correct. En revanche, quand dans cette même section, on a
des nombres avec des décimales autres (1,2,3,4,6,7,8,9), le total affiché
diffère parfois d'un centime en plus ou en moins selon le cas avec le
total exact (calculé avec une bonne vieille machine à calculer doté d'un
rouleau chiffrier !). Parfois aussi, cela tombe pile-poil !

Ai-je la berlue ou suis-je tombé sur un bug d'Access ? On dirait
qu'Access (en tout cas la version 97) arrondit automatiquement les
nombres dans un total et selon une logique qui m'échappe quelque peu...

Est-ce quelqu'un fréquentant cet admirable forum pourrait m'éclairer ?

Merci d'avance et bon week-end.

Dominique