73 Stimmen

Beste Möglichkeit, Währungswerte in C++ zu speichern

Ich weiß, dass ein Float aufgrund von Rundungsfehlern nicht geeignet ist, um Währungswerte zu speichern. Gibt es eine Standardmethode zur Darstellung von Geld in C++?

Ich habe in der Boost-Bibliothek nachgesehen und nichts darüber gefunden. In Java scheint es, dass BigInteger der Weg ist, aber ich konnte kein Äquivalent in C++ finden. Ich könnte meine eigene Geldklasse schreiben, ziehe es aber vor, dies nicht zu tun, wenn es etwas getestet wird.

0voto

Greg Rogers Punkte 34400

El GMP Bibliothek hat "bignum"-Implementierungen, die Sie für beliebig große Ganzzahlberechnungen verwenden können, die für den Umgang mit Geld benötigt werden. Siehe die Dokumentation für mpz_klasse (Warnung: dies ist schrecklich unvollständig, obwohl die gesamte Palette der arithmetischen Operatoren zur Verfügung gestellt wird) .

0voto

Ich würde signed long für 32-Bit und signed long long für 64-Bit verwenden. Dadurch erhalten Sie eine maximale Speicherkapazität für die zugrunde liegende Menge selbst. Ich würde dann zwei benutzerdefinierte Manipulatoren entwickeln. Einen, der die Menge auf der Grundlage von Wechselkursen umrechnet, und einen, der die Menge in die von Ihnen gewünschte Währung umrechnet. Sie können weitere Manipulatoren für verschiedene Finanzoperationen / und Regeln entwickeln.

0voto

brff19 Punkte 650

Dies ist ein sehr alter Beitrag, aber ich dachte mir, ich aktualisiere ihn ein wenig, da es eine Weile her ist und sich die Dinge geändert haben. Ich habe unten etwas Code gepostet, der den besten Weg darstellt, den ich in der Lage war, Geld mit der long long integer Datentyp in der C Programmiersprache.

#include <stdio.h>

int main()
{
    // make BIG money from cents and dollars
    signed long long int cents = 0;
    signed long long int dollars = 0;

    // get the amount of cents
    printf("Enter the amount of cents: ");
    scanf("%lld", &cents);

    // get the amount of dollars
    printf("Enter the amount of dollars: ");
    scanf("%lld", &dollars);

    // calculate the amount of dollars
    long long int totalDollars = dollars + (cents / 100);

    // calculate the amount of cents
    long long int totalCents = cents % 100;

    // print the amount of dollars and cents
    printf("The total amount is: %lld dollars and %lld cents\n", totalDollars, totalCents);
}

-1voto

Unser Finanzinstitut verwendet "double". Da wir ein Geschäft mit festverzinslichen Wertpapieren betreiben, haben wir viele komplizierte Algorithmen, die ohnehin Double verwenden. Der Trick besteht darin, dafür zu sorgen, dass Ihre Endbenutzerpräsentation die Präzision von Double nicht übersteigt. Wenn wir zum Beispiel eine Liste von Geschäften mit einer Gesamtsumme von Billionen von Dollar haben, müssen wir sicher sein, dass wir keinen Müll aufgrund von Rundungsproblemen drucken.

-2voto

Und schreiben Sie Ihr eigenes Geld ( http://junit.sourceforge.net/doc/testinfected/testing.htm ) oder Währung () (je nachdem, was Sie brauchen). und testen Sie es.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X