Ticket UUID: c20546bb903eea0bd54ee969aa76226217e394ac
Title: Changer le stockage de monnaie vers des INTEGER
Status: Open Type: Feature_Request
Severity: Important Priority: High
Subsystem: Resolution: Open
Last Modified: 2017-08-01 01:09:42
Version Found In: 0.7.6
User Comments:
nfrery added on 2017-02-28 03:22:16: (text/x-fossil-plain)
Lors d'un essai de report à nouveau automatique d'un exercice test, j'ai eu l'erreur suivante: *Le montant ne peut être égal ou inférieur à zéro*.
L'erreur provient d'un compte qui a pour somme 0 (-0.00 dans le grand livre) ou d'après la requête SQL de la fonction doReports(), ligne 159 de Exercices.php, j'obtiens 5.6843418860808e-14.
Les deux SUM de la requête retourne chacun la somme 316.11 ce qui est tout à fait correct.

Ce n'est pas un problème pour moi qui fait le report manuellement, mais ça pourrait poser soucis à certains.

Je propose de rajouter deux round()
ROUND(COALESCE((SELECT SUM(montant) FROM compta_journal WHERE compte_debit = compta_comptes.id AND id_exercice = 1), 0))
            - ROUND(COALESCE((SELECT SUM(montant) FROM compta_journal WHERE compte_credit = compta_comptes.id AND id_exercice = 1), 0))

nfrery added on 2017-02-28 03:24:08: (text/x-fossil-plain)
ROUND(COALESCE((SELECT SUM(montant) FROM compta_journal WHERE compte_debit = compta_comptes.id AND id_exercice = 1), 0),2) sera plus approprié !

bohwaz added on 2017-02-28 04:00:54: (text/x-fossil-plain)
Ah oui c'est un problème de nombre flottant.

J'ai fait une gaffe ici, les nombres devraient être stockés comme integers et non comme floats, ce qui génère ce genre de problème.

SQLite ne supporte pas le type "DECIMAL" il faudrait donc stocker les nombres en tant que "INTEGER", chiffres après la virgule compris, ce qui serait plus exact.

Par exemple 42,99 € serait stocké "4299", et 12 € serait stocké "1200". La conversion en décimal serait effectuée à l'affichage au niveau de PHP en ajoutant une virgule au bon endroit.

Je renomme correctement le ticket et vais essayer de faire ça pour la 0.8.0, sinon j'appliquerais ton idée en attendant.

DaD added on 2017-07-28 08:33:42: (text/x-fossil-plain)
Bonjour.

Dans certains logiciels il y a un peu plus que 2 chiffres après la virgules qui sont stockés en base.

J’ai regardé un peu Dolibarr et j’ai vu qu’ils utilisaient 5 chiffres après la virgule.

bohwaz added on 2017-07-31 23:09:20: (text/x-fossil-plain)
J'ai appliqué la modif. de nicolas dans la branche de dév. [d76c988ed81c8877a44a52f6780b10b50f4ef4ca]

Je ne pourrais pas faire le changement de stockage pour la 0.8 il y a déjà trop de trucs prévus.

@DaD: c'est parce qu'ils utilisent une plus grande précision à la base, par exemple tu peux avoir des produits en stock qui ont un prix de 0,009 € et tu applique une TVA etc. dessus, mais dans Garradin la précision est limitée à deux chiffres après la virgule.