Was ist der beste Datentyp für das Halten von Prozentwerten zwischen 0,00% und 100,00%?
sql-server
types
sqldatatypes
Benutzer
quelle
quelle
Antworten:
Angenommen, Ihre Prozentsätze enthalten zwei Dezimalstellen. Der verwendete Datentyp hängt davon ab, wie Sie Ihre Prozentsätze speichern möchten. Wenn Sie ihr gebrochenes Äquivalent speichern möchten (z. B. 100,00% als 1,0000 gespeichert), würde ich die Daten in einem
decimal(5,4)
Datentyp mit einerCHECK
Einschränkung speichern, die sicherstellt, dass die Werte niemals 1,0000 überschreiten (vorausgesetzt, dies ist die Obergrenze) und niemals unter 0 fallen (vorausgesetzt, das ist der Boden). Wenn Sie ihren Nennwert speichern möchten (z. B. 100,00% werden als 100,00 gespeichert), sollten Sie ihndecimal(5,2)
mit einer geeignetenCHECK
Einschränkung verwenden. In Kombination mit einem guten Spaltennamen wird anderen Entwicklern klar, was die Daten sind und wie die Daten in der Spalte gespeichert werden.quelle
decimal(5,2)
dass 2 die Anzahl der Stellen nach dem Dezimaltrennzeichen bezeichnet?decimal(5,2)
ist das, was mit einer Prüfbedingung erfasst werden sollte.decimal(5,4)
unddecimal(5,2)
nach dem obigen Kommentar geändert wurde ... Ich denke, diesdecimal(5,4)
wäre die bessere Definition - dh Sie möchten 0 bis 1 mit 2 Dezimalstellen speichern, nicht 0 bis 100. Der Grund, warum ein Prozentsatz angegeben ist, liegt außerhalb von 100; 100% ist also 100/100, was 1 ist. In den meisten Fällen ist es sinnvoller, dies auf diese Weise zu tun (z. B.100% * 100% = 100%
nicht10000%
;1 * 1 = 1
).100.00
), müssen Siedecimal(5,2)
. Wenn die Werte als Brüche gespeichert werden sollen (z. B.1.0000
), müssen Siedecimal(5,4)
. Wird den Beitrag aktualisieren.decimal
.columnName decimal(precision, scale)
. Die Genauigkeit gibt die Gesamtzahl der Ziffern an, die in der Zahl enthalten sein können. Die Skalierung gibt an, wie viele davon nach der Dezimalstelle stehen, alsodecimal(3,2)
eine Zahl, die dargestellt werden kann wie#.##
;decimal(5,3)
wäre##.###
.decimal
undnumeric
sind im Wesentlichen das gleiche. Istdecimal
jedoch ANSI-konform, verwenden Sie dies immer, sofern nicht anders angegeben (z. B. durch die Codierungsstandards Ihres Unternehmens).Beispielszenarien
decimal(5,4)
.decimal(3,2)
.Beispiel:
Weiterführende Literatur:
0 to 1
vs0 to 100
: C #: Speichern von Prozentsätzen, 50 oder 0,50?quelle
Ich stimme Thomas zu und würde die DECIMAL (5,4) -Lösung zumindest für WPF-Anwendungen wählen.
In der MSDN Numeric Format String erfahren Sie, warum: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Dann können Sie dies in Ihrem XAML-Code verwenden:
quelle
Wenn 2 Dezimalstellen Ihre Genauigkeit sind, würde ein "smallint" dies auf kleinstem Raum (2 Bytes) verarbeiten. Sie speichern den Prozentsatz multipliziert mit 100.
EDIT: Der Dezimaltyp passt wahrscheinlich besser zusammen. Dann müssen Sie nicht manuell skalieren. Es dauert 5 Bytes pro Wert.
quelle
Verwenden Sie numerisch (n, n), wobei n eine ausreichende Auflösung hat, um auf 1,00 zu runden. Zum Beispiel:
quelle