Nachdem ich mich mit diesem Thema in tatsächlichen Finanzsystemen beschäftigt habe, kann ich Ihnen sagen, dass Sie wahrscheinlich eine Zahl mit einer Genauigkeit von mindestens 6 Dezimalstellen verwenden sollten (ausgehend von USD). Da es sich um Währungswerte handelt, werden Sie hier hoffentlich nicht völlig aus dem Ruder laufen. Es gibt Vorschläge für das Hinzufügen von Dezimaltypen zu C++, aber ich weiß nichts von Vorschlägen, die tatsächlich schon verfügbar sind.
Der beste native C++-Typ, den man hier verwenden kann, ist long double.
Das Problem bei anderen Ansätzen, die einfach einen int verwenden, ist, dass Sie mehr als nur Ihre Cents speichern müssen. Oft werden Finanztransaktionen mit nicht-ganzzahligen Werten multipliziert, und das bringt Probleme mit sich, da 100,25 $, übersetzt in 10025 * 0,000123523 (z. B. APR), Probleme verursachen. Irgendwann landet man im Fließkomma-Land, und die Konvertierung wird sehr teuer.
In den meisten einfachen Situationen tritt das Problem nicht auf. Ich gebe Ihnen ein genaues Beispiel:
Wenn Sie mehrere tausend Währungswerte mit einem Prozentsatz multiplizieren und dann addieren, erhalten Sie eine andere Zahl, als wenn Sie die Gesamtsumme mit diesem Prozentsatz multipliziert hätten, wenn Sie nicht genügend Nachkommastellen beibehalten. Das mag in manchen Situationen funktionieren, aber oft liegen Sie dann schnell um mehrere Cent daneben. Meiner allgemeinen Erfahrung nach sollten Sie darauf achten, dass Sie eine Genauigkeit von bis zu 6 Dezimalstellen beibehalten (und sicherstellen, dass die verbleibende Genauigkeit für den ganzzahligen Teil verfügbar ist).
Verstehen Sie auch, dass es keine Rolle spielt, mit welchem Typ Sie es aufbewahren, wenn Sie weniger präzise rechnen. Wenn Sie mit einfacher Genauigkeit rechnen, spielt es keine Rolle, ob Sie die Daten mit doppelter Genauigkeit speichern. Ihre Genauigkeit wird bis zur ungenauesten Berechnung korrekt sein.
Das heißt, wenn Sie nur einfache Additionen oder Subtraktionen durchführen und dann die Zahl speichern, ist alles in Ordnung, aber sobald etwas Komplizierteres auftaucht, bekommen Sie Probleme.