2010-03-04 5 views
181

Ich habe die folgende Spalte in einer Datenbank angegeben: Dezimal (5,2)Wie interpretiere ich die Genauigkeit und Skalierung einer Zahl in einer Datenbank?

Wie interpretiert man das?

Nach den Eigenschaften in der Spalte, wie in SQL Server Management Studio angezeigt, kann ich sehen, dass es bedeutet: Dezimal (numerische Genauigkeit, Numerische Skalierung).

Was bedeuten Präzision und Maßstab real?

Es wäre leicht, dies als Dezimalzahl mit 5 Ziffern und zwei Dezimalstellen ... dh 12345,12

P. S. zu interpretieren Ich war in der Lage, die richtige Antwort von einem Kollegen zu bestimmen, hatte aber große Schwierigkeiten, online eine Antwort zu finden. Daher möchte ich die Frage und die Antwort hier auf Stackoverflow für zukünftige Referenz dokumentiert haben.

Antwort

300

Die numerische Genauigkeit bezieht sich auf die maximale Anzahl der Ziffern in der Zahl.

dh 1234567,89 hat eine Genauigkeit von 9

numerischen Skala bezieht sich auf die maximale Anzahl von Dezimalstellen

dh 123456.789 besitzt eine Skala von 3

somit den maximal zulässigen Wert für dezimale (5, 2) 999,99

+10

Vergessen Sie nicht, dass, wenn Sie ein System verwenden, das Sie Genauigkeit und Skalierung eines Eingangs vordefinieren erlaubt Für einen Prozentsatz in etwas wie Microsoft Access müssen Sie den Prozentsatz als Ganzzahlform betrachten. In diesem Fall würde 25,5% erfordert Präzision 4 und das Ausmaß von 3 (nicht ein), da wir es als 0,255 berücksichtigen müssen. Ich kam früh über dieses Problem und wurde für eine Weile ratlos fragen, warum Maßstab 1 nicht funktioniert. –

+1

@mezoid Was bedeutet ein negativer Skalenwert? – Geek

+0

@Geek Nach http://technet.microsoft.com/en-us/library/ms187746.aspx Die Skala kann nicht kleiner als Null sein. 0 <= Skalierung <= Genauigkeit. Im Wesentlichen wäre ein negativer Skalenwert bedeutungslos. – mezoid

14

Precision, Scale, and Length in dem SQL Server 2000-Dokumentation lautet:

Präzision ist die Anzahl der Ziffern in einer Zahl. Scale ist die Anzahl der Stellen rechts vom Dezimalpunkt in einer Zahl. Zum Beispiel hat die Zahl 123,45 eine Genauigkeit von 5 und eine Skalierung von 2.

60

Präzision einer Zahl ist die Anzahl der Stellen.

Maßstab einer Zahl ist die Anzahl der Nachkommastellen.

Im Allgemeinen wird bei der Festlegung der Genauigkeit und Skalierung der Felddefinition vorausgesetzt, dass sie maximale Werte darstellen.

Beispiel, ein dezimales Feld definiert mit precision=5 und scale=2 würde die folgenden Werte erlauben:

  • 123.45 (p = 5, s = 2)
  • 12.34 (p = 4, s = 2)
  • 12345 (p = 5, s = 0)
  • 123.4 (p = 4, s = 1)
  • 0 (p = 0, s = 0)

Die folgenden Werte sind nicht erlaubt oder würde einen Datenverlust verursachen:

  • 12.345 (p = 5, s = 3) => abgeschnitten werden könnte, in 12.35 (p = 4, s = 2)
  • 1234.56 (p = 6, s = 2) => könnte in 1234.6 abgeschnitten werden (p = 5, s = 1)
  • 123.456 (p = 6, s = 3) => in 123.46 abgeschnitten werden (p = 5, s = 2)
  • 123450 (p = 6, s = 0) => aus

Tonumfang, dass der Bereich im Allgemeinen durch die Präzision definiert: |value| < 10^p ...

+5

Beachten Sie, dass MS SQL Server würde 12345 oder 1234.56 nicht zulassen, weil „[Skala] von [Präzision] abgezogen wird, um die maximale Anzahl der Stellen links vom Komma zu bestimmen.“ (Quelle: [decimal und numeric] (http://technet.microsoft.com/en-us/library/ms187746.aspx)) –

+0

Wie wäre es '12345000'? Präzision 5 oder 8? Wenn 5, mit welcher Skala? Skala -3? – towi

+0

@towi was bedeutet das? Wenn Sie das speichern wollten, würden Sie 8,0 verwenden. –