Veritabanındaki bir sayının kesinliğini ve ölçeğini nasıl yorumlayabilirim?


245

Bir veritabanında belirtilen aşağıdaki sütun var: ondalık (5,2)

Kişi bunu nasıl yorumlar?

SQL Server Management stüdyosunda görüntülenen sütundaki özelliklere göre bunun anlamını görebiliyorum: ondalık (Sayısal kesinlik, Sayısal ölçek).

Hassasiyet ve ölçek gerçek anlamda ne anlama geliyor?

Bunu 5 basamaklı ve iki ondalık basamaklı bir ondalık sayı olarak yorumlamak kolay olurdu ... yani 12345.12

Not: Bir meslektaşımdan doğru cevabı belirleyebildim, ancak çevrimiçi cevap bulmakta büyük zorluk çektim. Bu nedenle, soru ve yanıtın ileride başvurmak üzere stackoverflow'da belgelenmesini istiyorum.

Yanıtlar:


396

Sayısal kesinlik, sayıdaki maksimum basamak sayısını ifade eder.

yani 1234567.89, 9 hassasiyete sahiptir

Sayısal ölçek maksimum ondalık basamak sayısını ifade eder

yani 123456.789 ölçeği 3'tür.

Böylece, ondalık (5,2) için izin verilen maksimum değer 999,99'dur.


14
Microsoft Access gibi bir şeyde bir girdinin kesinliğini ve ölçeğini yüzde olarak önceden tanımlamanıza izin veren bir sistem kullanıyorsanız, yüzdeyi tam sayı formu olarak düşünmeniz gerektiğini unutmayın. Bu durumda,% 25.5, .255 olarak düşünmemiz gerektiğinden hassasiyet 4 ve 3 ölçeği (bir değil) gerektirir. Bu soruna erken rastladım ve bir süre ölçeğin neden çalışmadığını merak ettim.
Ashton Sheets

1
@mezoid Negatif ölçek değeri ne anlama geliyor?
Geek

@Geek göre technet.microsoft.com/en-us/library/ms187746.aspx ölçekli sıfırdan az olamaz. 0 <= ölçek <= hassasiyet. Temelde negatif bir ölçek değeri anlamsız olacaktır.
mezoid


1
Olmamalı: "Sayısal kesinlik, sayıda bulunabilecek maksimum basamak sayısını ifade eder."? Tam sayı 123.5 de hassas 10 olabilir, ancak eklenecek başka basamak yoktur. Yoksa bu 123.5000000 olur mu?
Chris311

86

Bir sayının kesinliği basamak sayısıdır.

Bir sayının ölçeği, ondalık noktadan sonraki basamak sayısıdır.

Genellikle alan tanımında kesinlik ve ölçek ayarlanırken ima edilen, maksimum değerleri temsil etmeleridir .

Örneğin, aşağıdaki değerlerle tanımlanan precision=5ve scale=2aşağıdaki değerlere izin veren bir ondalık alan :

  • 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)

Aşağıdaki değerlere izin verilmez veya veri kaybına neden olur:

  • 12.345(p = 5, s = 3) => kısaltılabilir 12.35(p = 4, s = 2)
  • 1234.56(p = 6, s = 2) => kısaltılabilir 1234.6(p = 5, s = 1)
  • 123.456(p = 6, s = 3) => kısaltılabilir 123.46(p = 5, s = 2)
  • 123450 (p = 6, s = 0) => aralık dışı

Aralık genellikle hassasiyetle tanımlanır: |value| < 10^p...


5
MS SQL Server'ın 12345 veya 1234.56'ya izin vermeyeceğini unutmayın, çünkü "[ölçek] ondalık noktanın solundaki maksimum basamak sayısını belirlemek için [duyarlık] 'dan çıkarılır." (kaynak: ondalık ve sayısal )
molnarm

Nasıl 12345000? Hassasiyet 5 veya 8? 5 ise, hangi skala ile? Ölçek -3?
towi

@towi bu ne anlama geliyor? Eğer bunu saklamak istersen, 8.0 kullanırdın.
Rob Grant

Güzel cevap, ama neden 123450 (p=6,s=0)menzil dışında? 123450'de 6 basamak var ve bir noktadan sonra basamak yok mu?
Matthias Burger

1
@MatthiasBurger 123450 (p=6,s=0), 5 hassasiyetle ondalık bir alan için aralık dışında olacaktır (örnekte belirtildiği gibi). Çünkü bir alanda saklamak istediğiniz bir sayının hassasiyeti, alanın hassasiyetinden küçük veya ona eşit olmalıdır.
Snozzlebert

26

SQL Server 2000 belgelerindeki Hassasiyet, Ölçek ve Uzunluk şöyledir:

Kesinlik, bir sayıdaki basamak sayısıdır. Ölçek, bir sayıdaki ondalık ayırıcının sağındaki basamak sayısıdır. Örneğin, 123.45 sayısının hassasiyeti 5 ve ölçeği 2'dir.


Teşekkür ederim. Delphi / Pascal kodunun bir parçasının şamandıranın ondalık kısmını kesmek için 0 ölçeğini kullandığını fark ettim
peterchaula
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.