Was ist der beste Weg, um einen Geldwert in der Datenbank zu speichern?
Frage
Ich brauche ein paar Geld bezogenen Felder in der Datenbank zu speichern, aber ich bin mir nicht sicher, welcher Datentyp zwischen Geld zu verwenden, und dezimal .
Lösung
Dezimal und Geld sollte recht zuverlässig sein. Was kann ich Ihnen versichern (von schmerzhaften persönlichen Erfahrungen aus geerbten Anwendungen) ist NICHT Verwendung Schwimmer!
Andere Tipps
Ich verwende Dezimal immer; nie zuvor Geld verwendet wird.
Vor kurzem fand ich einen Artikel über dezimal gegen Typ Gelddaten in SQL Server, die Sie interessant finden könnte:
Es scheint auch, dass der Geld-Datentyp nicht immer in genauen Ergebnissen führt, wenn Sie Berechnungen mit ihm durchführen: klicken
Was ich als wel in der Vergangenheit getan hat, wird ein INT-Feld verwendet wird, und speichern Sie die Menge in Cent (Cent / dollarcent).
Ich denke, es kommt auf die Genauigkeit und Skalierung. IIRC, money
ist 4DP. Wenn das in Ordnung ist, drückt money
Ihre Absicht. Wenn Sie mehr Kontrolle möchten, verwenden Sie decimal
mit einer bestimmten Genauigkeit und Skalierung.
Es hängt von Ihrer Anwendung !!! Ich in Finanzdienstleistungen arbeiten, wo wir normalerweise Preis prüfen signifikant 5 Dezimalstellen nach dem Punkt sein, was natürlich, wenn Sie ein paar Millionen bei 3.12345pence kaufen / Cent ist eine erhebliche Menge. Einige Anwendungen werden ihre eigenen SQL-Typ liefern, dies zu umgehen.
Auf der anderen Seite, könnte dies nicht notwendig sein.
Sie richten nicht Ihre Gedanken basierend auf dem verfügbaren Datentypen. Vielmehr Ihre Anforderung analysieren und dann sehen, welcher Datentyp am besten paßt. Float ist jederzeit die schlechteste Wahl, um die Begrenzung der Architektur bei der Speicherung von binärer Version von Gleitkommazahlen berücksichtigen. Geld ist eine Standard-Einheit und wird sicherlich mehr Unterstützung hat für Geld bezogene Operationen Handhabung. Im Falle von dezimal, werden Sie jeden und alles im Griff haben, aber Sie wissen, es ist nur Ihnen, die eine Dezimal-Typ ist der Umgang, also keine Überraschungen, die Sie mit anderen beiden Datentypen können.
Mit dezimal und verwenden mehr Dezimalstellen als Sie denken müssen Sie damit caclulations korrekt. Geld nicht alwys korrekte Ergebnisse in Berechnungen zurück. Unter keinen Umständen float oder real wie diese verwenden, sind ungenauen Datentypen und können Berechnungen verursachen, falsch sein (vor allem, da sie komplexer werden).
Für einige Daten (wie Geld), wo Sie keine Annäherung oder Änderungen wollen aufgrund Wert schweben, müssen Sie sicher sein, dass die Daten nie ‚schwebenden‘, es auf beiden Seiten des Dezimalpunkts starr sein muss.
Ein einfacher Weg, um sicher zu sein ist, auf dem Wert, indem sie in INTEGER-Datentyp umzuwandeln, und sicher sein, dass, während Sie den Wert retrive wird Dezimalpunkt an den richtigen Stelle platziert.
z.B.
1. Um $ 240,10 in der Datenbank zu speichern.
2. Konvertieren Sie es in eine reine Integralform: 24010 (Sie ihr nur die Verschiebung der Dezimalstelle weiß)
.
3. Revert es auf dem richtigen Dezimal Zustand zurück. Setzen Sie dezimal in 2 Positionen von rechts. $ 240,10
So, während in databse wobei in einer starren Integer-Form sein wird.