Vous voulez stocker votre monnaie long
et calculer votre monnaie double
, au moins comme une sauvegarde. Vous voulez que toutes les transactions aient lieu comme long
.
La raison pour laquelle vous souhaitez stocker votre devise long
est que vous ne voulez pas perdre de devise.
Supposons que vous utilisiez un double
, et que vous n’ayez pas d’argent. Quelqu'un vous donne trois centimes, puis les reprend.
You: 0.1+0.1+0.1-0.1-0.1-0.1 = 2.7755575615628914E-17
Eh bien, ce n'est pas si cool. Peut-être que quelqu'un avec 10 $ veut donner sa fortune en vous donnant d'abord trois centimes, puis en donnant 9,70 $ à quelqu'un d'autre.
Them: 10.0-0.1-0.1-0.1-9.7 = 1.7763568394002505E-15
Et puis vous leur rendez les dix sous:
Them: ...+0.1+0.1+0.1 = 0.3000000000000018
Ceci est juste cassé.
Utilisons maintenant un long terme, et nous garderons une trace des dixièmes de centimes (donc 1 = 0,001 $). Donnons à chacun sur la planète un milliard, cent douze millions, soixante quinze mille mille cent quarante trois dollars:
Us: 7000000000L*1112075143000L = 1 894 569 218 048
Euh, attendez, on peut donner à tout le monde plus d'un milliard de dollars, et ne dépenser qu'un peu plus de deux? Le débordement est une catastrophe ici.
Ainsi, chaque fois que vous calculez une somme d’argent à transférer, utilisez-la double
et Math.round
obtenez-la long
. Puis corrigez les soldes (ajoutez et soustrayez les deux comptes) en utilisant long
.
Votre économie ne coulera pas et atteindra un quadrillion de dollars.
Il ya plus de problèmes épineux - par exemple, que faites-vous si vous effectuez 20 paiements? * - mais cela devrait vous aider à démarrer.
* Vous calculez ce qu'est un paiement, arrondissez à long
; puis multiplier par 20.0
et vérifier qu'il est dans la fourchette; Dans ce cas, multipliez le paiement par 20L
pour obtenir le montant déduit de votre solde. En général, toutes les transactions doivent être traitées comme long
si, de sorte que vous avez vraiment besoin de résumer toutes les transactions individuelles; vous pouvez multiplier comme un raccourci, mais vous devez vous assurer de ne pas ajouter des erreurs d' arrondi et que vous ne déborde pas, ce qui signifie que vous devez vérifier avec double
avant de faire le calcul réel long
.