Sie möchten speichern Sie Ihre Währung in long
und berechnen Sie Ihre Währung in double
zumindest als Backup. Sie möchten, dass alle Transaktionen als stattfinden long
.
Der Grund, warum Sie Ihre Währung speichern möchten, long
ist, dass Sie keine Währung verlieren möchten.
Nehmen wir an, Sie verwenden a double
und haben kein Geld. Jemand gibt Ihnen drei Groschen und nimmt sie dann zurück.
You: 0.1+0.1+0.1-0.1-0.1-0.1 = 2.7755575615628914E-17
Naja, das ist nicht so cool. Vielleicht möchte jemand mit 10 US-Dollar sein Vermögen verschenken, indem er Ihnen zuerst drei Cent und dann 9,70 US-Dollar an einen anderen verschenkt.
Them: 10.0-0.1-0.1-0.1-9.7 = 1.7763568394002505E-15
Und dann gibst du ihnen die Groschen zurück:
Them: ...+0.1+0.1+0.1 = 0.3000000000000018
Das ist einfach kaputt.
Lassen Sie uns nun eine lange verwenden, und wir werden Zehntel Cent verfolgen (also 1 = 0,001 $). Geben wir jedem auf dem Planeten eine Milliarde, einhundertzwölf Millionen, fünfundsiebzigtausend, einhundertdreiundvierzig Dollar:
Us: 7000000000L*1112075143000L = 1 894 569 218 048
Warten Sie, wir können jedem mehr als eine Milliarde Dollar geben und nur etwas mehr als zwei ausgeben? Überlauf ist hier eine Katastrophe.
Also, wann immer Sie einen Geldbetrag berechnen, um ihn zu übertragen, zu verwenden double
und Math.round
zu erhalten long
. Richten Sie dann Salden ein (addieren und subtrahieren Sie beide Konten), indem Sie verwenden long
.
Ihre Wirtschaft wird nicht auslaufen und auf eine Billiarde Dollar anwachsen.
Es gibt schwierigere Probleme - zum Beispiel, was machen Sie, wenn Sie zwanzig Zahlungen leisten? * - aber dies sollte Ihnen den Einstieg erleichtern.
* Sie berechnen, was eine Zahlung ist, rund um long
; dann multipliziere mit 20.0
und überprüfe, ob es in Reichweite ist; In diesem 20L
Fall multiplizieren Sie die Zahlung mit , um den von Ihrem Guthaben abgezogenen Betrag zu erhalten. Im Allgemeinen müssen alle Transaktionen so behandelt werden long
, dass Sie wirklich alle einzelnen Transaktionen zusammenfassen müssen. Sie können als Abkürzung multiplizieren, aber Sie müssen sicherstellen, dass Sie keine Rundungsfehler hinzufügen und nicht überlaufen, was bedeutet, dass Sie dies überprüfen müssen, double
bevor Sie die eigentliche Berechnung mit ausführen long
.