Was ist Ihr Rat an:
Ich lese gerade Fowler . Er erwähnt Geldtyp, es ist typische Struktur (int, long, BigDecimal), sagt aber nichts über Strategien.
Ältere Beiträge zum Thema Geldrundung ( hier hier ) bieten keine Details und Formalitäten, die ich brauche.
Gedanken, die ich im inet gefunden habe, beziehen sich auf "Runde halbe gerade" als die beste Art, Fehler auszugleichen.
Danke für die Hilfe.
Beim Erfassen von Finanzdaten gibt es viele Rundungsprobleme. Das erste Problem ist die Fähigkeit, exakte Dezimalzahlen zu speichern und abzurufen
Wenn dieses erste Problem aussortiert wird, kann keine Addition (oder Subtraktion) Rundungsfehler verursachen. Dasselbe gilt für die Multiplikation mit Integer.
Das zweite Problem, nach dem Sie Daten ohne Informationsverlust speichern und abrufen können, sind Rundungsfehler aufgrund von Division (oder Multiplikation mit nicht ganzzahligen Werten).
Wenn zum Beispiel Ihr Währungsformat 2 Dezimalstellen erlaubt und Sie eine Transaktion speichern möchten, die eine Last von 10 bis 3 gleichen Teilen ausgleicht, können Sie sie nur wie
speichern %Vor%und
%Vor%(Rundungsfehler)
Dies ist ein erwartetes Problem, das unabhängig von der Speicherwahl des Datentyps auftritt und das berücksichtigt werden muss, wenn Ihre Konten ausgeglichen werden sollen. Diese Situation wird hauptsächlich durch Division (oder durch Multiplikation mit Nicht-Ganzzahlen, die viele signifikante Ziffern haben) eingeführt.
Eine Möglichkeit, um damit umzugehen, besteht darin, zu überprüfen, ob Ihre Daten nach solchen Operationen ausgeglichen sind, und die zulässige Rundungsdifferenz im Gegensatz zu einer Fehlersituation zu erkennen.
BEARBEITEN: Was Literaturangaben angeht, dieses scheint interessant und nicht zu lang und betrifft ein ziemlich breites Publikum mit interessanten Szenarien .
Verwenden Sie die Rundung des Bankers. Du rennst auf den nächsten Pfennig.
Sie können dies erweitern, um stattdessen toward
den nächsten Zwei-Pfennig zu runden. Also 22.5 Runden auf 22, aber 23.5 Runden auf 24. 23.1 und 22.9 beide Runde auf 23. Allerdings ist der ursprüngliche Banker-Algorithmus beliebter.
Alles hängt von der Anwendung ab. Hoffentlich gibt es nicht zu viele Situationen, in denen gerundet werden muss. Zum Beispiel erfordert die Überweisung von Geld von einem Konto zu einem anderen keine Rundung.
In Situationen, in denen eine Rundung erforderlich ist, spielt es keine Rolle, was Sie tun, solange Sie eine Richtlinie auswählen, sie kommunizieren und sich daran halten. Zum Beispiel glaube ich, dass sich die Zinsen auf meinem Sparkonto auf den nächsten Cent reduzieren.
Ich habe ein wenig (ein bisschen) mit Geldbeträgen gearbeitet und war sehr neugierig auf die Strategie, die in meiner Firma verwendet wurde ...
Es stellt sich heraus, dass wir double
verwenden, aber sie haben darüber nachgedacht.
Die Sache ist, dass die Beträge, mit denen wir uns beschäftigen, nicht so groß sind (sagen wir weniger als 10k) und wir höchstens 3 Nachkommastellen brauchen, für insgesamt 7 signifikante Ziffern.
Da wir 64-Bit-Software (und C ++) verwenden, bietet der double
-Typ genug signifikante Ziffern für die Anzahl der Operationen, die wir damit ausführen:)
Wenn Sie mehr Präzision benötigen, gibt es Algorithmen zu verwenden (zum Beispiel beim Hinzufügen mehrerer Gelder), aber ich persönlich denke, das Herz des Problems kommt mehr von:
Vielleicht könnten Sie die Operationen, die Sie gerade ausführen, erweitern?
Was Sie tun sollten, hängt sehr wahrscheinlich von den Konventionen des Marktes oder der Rechtsprechung ab, in der Sie tätig sind. Wenn Sie zum Beispiel Anleihen auf dem australischen Markt preisen, müssen Sie bestimmte Zwischenoperationen auf acht Dezimalstellen runden. Der Endpreis wird mit einer bestimmten Anzahl von Dezimalstellen angegeben (3 denke ich von oben).
Wenn Sie mit einer Buchhaltungs-App zu tun haben, würde ich erwarten, dass die relevanten Rechnungslegungsstandards für Ihr rechtliches Umfeld dies möglicherweise vorschreiben.