Vuoi conservare la tua valuta longe calcolare la tua valuta double, almeno come backup. Volete che tutte le transazioni avvengano come long.
Il motivo per cui vuoi conservare la tua valuta longè che non vuoi perdere alcuna valuta.
Supponiamo che tu usi un double, e non hai soldi. Qualcuno ti dà tre dimes, e poi li riprende.
You: 0.1+0.1+0.1-0.1-0.1-0.1 = 2.7755575615628914E-17
Beh, non è così bello. Forse qualcuno con $ 10 vuole regalare la propria fortuna dandoti prima tre dimes e poi dando $ 9,70 a qualcun altro.
Them: 10.0-0.1-0.1-0.1-9.7 = 1.7763568394002505E-15
E poi restituisci loro le dimes:
Them: ...+0.1+0.1+0.1 = 0.3000000000000018
Questo è solo rotto.
Ora, usiamo un lungo e terremo traccia dei decimi di centesimi (quindi 1 = $ 0,001). Diamo a tutti sul pianeta un miliardo, centododici milioni, settantacinquemila, centoquarantatre dollari:
Us: 7000000000L*1112075143000L = 1 894 569 218 048
Aspetta, possiamo dare a tutti oltre un miliardo di dollari e spendere solo poco più di due? L'overflow è un disastro qui.
Quindi, ogni volta che stai calcolando una somma di denaro da trasferire, usa doublee Math.roundper ottenere un long. Quindi aggiusta i saldi (aggiungi e sottrai entrambi gli account) usando long.
La tua economia non perderà e raggiungerà i quadrilioni di dollari.
Esistono problemi più delicati, ad esempio cosa fai se effettui venti pagamenti? *, Ma questo dovrebbe iniziare.
* Calcola quale è un pagamento, arrotondato a long; quindi moltiplicare per 20.0e verificare che sia nell'intervallo; in tal caso, moltiplichi il pagamento 20Lper ottenere l'importo dedotto dal tuo saldo. In generale, tutte le transazioni devono essere gestite come long, quindi è davvero necessario riassumere tutte le singole transazioni; puoi moltiplicare come scorciatoia, ma devi assicurarti di non aggiungere errori di arrotondamento e di non traboccare, il che significa che devi verificare con doubleprima di fare il calcolo reale con long.