Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fließkommazahl oder Dezimalzahl für den Dollarbetrag der Buchhaltungsanwendung verwenden?

Soll der Datentyp Float oder Decimal für Dollarbeträge verwendet werden?

Die Antwort ist einfach. Schwimmt nie. NIEMALS !

Floats waren nach IEEE 754 immer binäre, erst der neue Standard IEEE 754R definierte Dezimalformate. Viele der binären Bruchteile können niemals der exakten Dezimaldarstellung entsprechen.

Jede Binärzahl kann als m/2^n geschrieben werden (m , n positive ganze Zahlen), jede Dezimalzahl als m/(2^n*5^n) .Als Binärdateien fehlt der Primfaktor factor 5 , alle Binärzahlen können exakt durch Dezimalzahlen dargestellt werden, aber nicht umgekehrt.

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

          1/4         1/8         1/16          1/32

Sie erhalten also eine Zahl, die entweder höher oder niedriger als die angegebene Dezimalzahl ist. Immer.

Warum spielt das eine Rolle? Rundung.

Normales Runden bedeutet 0..4 abwärts, 5..9 aufwärts. Also macht es Egal, ob das Ergebnis entweder 0.049999999999 ist .... oder 0.0500000000 ... Sie wissen vielleicht, dass es 5 Cent bedeutet, aber der Computer weiß das nicht und rundet 0.4999 ... runter (falsch) und 0.5000 ... oben (rechts).

Da das Ergebnis von Fließkommarechnungen immer kleine Fehlerterme enthält, ist die Entscheidung reine Glückssache. Es wird hoffnungslos, wenn Sie mit binären Zahlen dezimal runden wollen.

Nicht überzeugt? Sie bestehen darauf, dass in Ihrem Kontosystem alles in Ordnung ist? Aktiva und Passiva gleich? Ok, dann nimm jede der gegebenen formatierten Zahlen jedes Eintrags, parse sie und summiere sie mit einem unabhängigen Dezimalsystem!

Vergleichen Sie das mit der formatierten Summe. Hoppla, da stimmt etwas nicht, oder?

Für diese Berechnung war extreme Genauigkeit und Wiedergabetreue erforderlich (wir verwendeten Oracle's FLOAT), damit wir den "Milliardstel eines Pennys" aufzeichnen konnten, der aufgelaufen ist.

Gegen diesen Fehler hilft es nicht. Weil alle Menschen automatisch davon ausgehen, dass der Computer richtig summiert, und praktisch niemand unabhängig nachschaut.