compter des sous
Xavier20-Nov-2006/0:42:28+1:00
bonjour,
dans le cadre de mon application, j'ai du compter des sous
et je me suis rendu compte du comportement suivant :
37.80 - 37.70
== 9.99999999999943E-2
>> subtract 37.80 37.70
== 9.99999999999943E-2
>> subtract to-money 37.80 to-money 37.70
== $0.10
Je suis surpris que la soustraction fonctionne de cette manière bien que je puisse vivre avec la version monétaire ... mais dans ce cas il faudrait changer le dollar en euro.
si quelqu'un a une idée ...
reboltof20-Nov-2006/9:09:40+1:00
J'ai déjà été confronté au cas. Il semblerait que ce comportement provienne d'un bug dans le moteur de calcul DE WINDOWS, sur lequel se base cette version de REBOL. Je ne l'ai pas observé sous Linux ou Mac.

La solution que tu as trouvé est la bonne: effectuer tes calculs au format money! et éventuellement, en fin de calcul, transformer la valeur en string! pour l'affichage, sans le "$":

>> remove form $37.80 - $37.70
== "0.10"

Une alternative acceptable est de préciser la monnaie utilisée:

EURO: EUR$10.23
Dollar: USD$10.23
Deutche Mark: DEM$10.23
etc...

qui sont des datatypes valides en REBOL.
coccinelle20-Nov-2006/21:50:15+1:00
ben tiens, v'là que'que chose d'nouveau et qui marche aussi avec le franc suisse :
>> chf$37.80 - chf$37.70
== CHF$0.10
>>


Carl nous réserve toujours bien des surprises.

Marco.
Didec21-Nov-2006/12:52:22+1:00
Le type Money! n'est pas nouveau.
La spécification du code monaie non plus.

C'est dans le manuel. Y'a des choses intéressantes :
http://www.rebol.com/docs/core23/rebolcore-16.html#section-3.4
Didec21-Nov-2006/12:56:52+1:00
Il est à noté que le datatype money! n'est qu'un pseudo type associant un string! (le code monaie) à un décimal! (la valeur) et n'autorisant que certaines opérations mathématiques.

Il a surtout la particularité de renvoyer une valeur sur 2 décimales et arrondie. Mais cela ne change rien à la valeur en mémoire qui n'est pas arrondie.

>> subtract to-money 37.80 to-money 37.70
== $0.10
>> second subtract to-money 37.80 to-money 37.70
== 9.99999999999943E-2
jipé21-Nov-2006/13:02:07+1:00
Tu peux même l'écrire comme ça :

>> frs$45 * 56
== FRS$2520.00


ou comme ça :

>> sui$45 * 56
== SUI$2520.00


ou comme tu voudras, mais en 3 lettres !
Xavier26-Nov-2006/0:50:40+1:00
Merci pour toute vos réponses,
ca éclaire fortement ma lanterne.
Le problème que j'ai rencontré est résolu de manière satisafaisante. Le logiciel a été rectifié pour travailler avec avec money pendant les calculs et le client et le programmeur en sont satisfait.

Merci pour tout vos coup de main.
coccinelle26-Nov-2006/10:16:22+1:00
Je ne peux que vous conseiller d'utiliser les codes monnaie iso alphabétique. C'est surement ce que Carl avait pensé en limitant à 3 lettres la monnaie. Vous pouvez les trouver ici : http://www.iso.org/iso/fr/prods-services/popstds/currencycodeslist.html

Marco.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2