2008-09-30 7 views

Antwort

11

Sie haben Decimal Datentyp verwenden ..

Das Dezimal-Schlüsselwort gibt einen 128-Bit-Datentyp. Im Vergleich zu Gleitkommatypen hat der Dezimaltyp eine höhere Genauigkeit und einen kleineren Bereich, was ihn für finanzielle und monetäre Berechnungen geeignet macht.

+5

Sie wissen, es ist nicht „mehr Präzision“, die wichtig ist, es ist die Art der Präzision. Dezimal basiert auf einer 10-Basen-Skala und wird immer genau eine Dezimalzahl innerhalb des Bereichs darstellen. Floats-Typen basieren jedoch auf einer binären Skala und beschreiben möglicherweise einen Bruchteil, der nicht Teil der Basis 10 – nedruod

2

Es kann durch Reflexion, sondern die Gründe möglich sein, dass es gibt es für FromOACurrency() und ToOACurrency() statische Methoden auf System.Decimal, die für convering vom/zum Ole Automation Currency Art ist, dass Visual Basic 6 Anwendungen.

7

Verwenden Sie Dezimal. Alle von Currency bereitgestellten Funktionen sind statische Methoden für Decimal, FromOACurrency und ToOACurrency.

-3

Sie können Decimal nicht für Währung verwenden. Sie werden später größere Probleme haben, wenn Sie sich teilen. Sagen Sie, wenn Sie $ 1 in 3 geteilt haben, was 1/3 = 0,33 (gerundet) ist, aber 3 x 0,33 = 0,99! = 1. Es könnte klein sein, aber wenn Sie das in Buchhaltung tun und Ihre Blätter stapeln, wird es sein eine riesige Figur. Das ist auch der Grund, warum das Standard-Auf-/Ab-Verhalten in .Net (nicht sicher über andere Programmiersprachen) auf den nächsten geraden Wert, auch Banker-Runden genannt, hinweist, um Fehler in der Buchhaltung im Vergleich zu unserer normalen "menschlichen" Art der Rundung zu minimieren.

Lesen Sie diese Seite für eine klarere Erklärung und eine besondere Klasse für den Umgang mit Geld. Code Project : A Money type for the CLR

auch über Rounding

+6

-1 ist, weil diese Antwort irreführend ist. Dezimal ist ein Datentyp, der speziell dafür entwickelt wurde, Geld korrekt zu speichern. Berechnungen durchzuführen ist eine andere Art von Problem und hängt vom Kontext ab: Wenn Sie Geld zu gleichen Teilen teilen möchten, ohne Geld zu verlieren, sollten Sie eine dedizierte Funktion/Methode/Klasse verwenden, die dies richtig macht (siehe http: // martinfowler .com/eaaCatalog/money.html). Der genannte Artikel auf Code Project basiert auf einigen ungültigen Annahmen: nicht zu verstehen, dass Dezimal als Basis 10 gespeichert ist, testen, die auch mit Dezimal erfolgreich sind, aber davon ausgeht, dass sie fehlschlagen werden. –

Verwandte Themen