Як інтерпретувати точність та масштаб числа в базі даних?


245

У базі даних вказаний наступний стовпець: десятковий (5,2)

Як трактує це хтось?

Відповідно до властивостей стовпця, що їх переглядають у студії управління SQL Server, я бачу, що це означає: десятковий (числова точність, числова шкала).

Що означають точність та масштабність у реальному виразі?

Було б легко інтерпретувати це як десятковий знак з 5 цифрами та двома десятковими місцями ... тобто 12345.12

PS Я зміг визначити правильну відповідь від колеги, але у мене виникли великі труднощі з пошуку відповіді в Інтернеті. Тому я хотів би, щоб питання та відповідь були задокументовані тут, на stackoverflow, для подальшого використання.

Відповіді:


396

Числова точність відноситься до максимальної кількості цифр, яка присутня в числі.

тобто 1234567.89 має точність 9

Числова шкала відноситься до максимальної кількості знаків після коми

тобто 123456.789 має шкалу 3

Таким чином, максимально дозволене значення для десятків (5,2) становить 999,99


14
Не забувайте, що якщо ви використовуєте систему, яка дозволяє заздалегідь визначити точність та масштабність введення на відсоток у чомусь на зразок Microsoft Access, ви повинні враховувати відсоток як цілу числову форму. У цьому випадку для 25,5% потрібна точність 4 та шкала 3 (не одна), оскільки ми маємо вважати це як .255. Я рано зіткнувся з цією проблемою і на деякий час наткнувся на питання, чому масштаб 1 не працює.
Ashton Sheets

1
@mezoid Що означає значення негативної шкали?
Geek

@Geek За даними technet.microsoft.com/en-us/library/ms187746.aspx Шкала не може бути меншою за нуль. 0 <= шкала <= точність. По суті, негативне значення шкали було б безглуздим.
мезоїд


1
Чи не повинно бути: "Числова точність стосується максимальної кількості цифр, яка може бути присутнім у число."? Точне число 123,5 також може бути з точністю 10, але більше цифр для додання більше немає. Або це стане 123,5000000?
Chris311

86

Точність числа - це кількість цифр.

Масштаб числа - це кількість цифр після коми.

Що, зазвичай, мається на увазі під час встановлення точності та шкали для визначення поля, це те, що вони представляють максимальні значення.

Приклад, десяткове поле, визначене з precision=5та scale=2дозволить отримати такі значення:

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

Наступні значення заборонені або можуть спричинити втрату даних:

  • 12.345(p = 5, s = 3) => можна врізати 12.35(p = 4, s = 2)
  • 1234.56(p = 6, s = 2) => можна врізати 1234.6(p = 5, s = 1)
  • 123.456(p = 6, s = 3) => можна врізати 123.46(p = 5, s = 2)
  • 123450 (p = 6, s = 0) => поза діапазоном

Зауважте, що діапазон, як правило, визначається точністю: |value| < 10^p...


5
Зауважте, що MS SQL Server не дозволить 12345 або 1234.56, оскільки "шкала віднімається від [точності] для визначення максимальної кількості цифр зліва від десяткової коми". (джерело: десятковий і числовий )
монарм

Як щодо 12345000? Точність 5 або 8? Якщо 5, з якою шкалою? Шкала -3?
towi

@towi що це означає? Якби ви хотіли зберігати це, ви використовуєте 8,0.
Роб Грант

Гарна відповідь, але чому це 123450 (p=6,s=0)поза діапазоном? 123450 має 6 цифр і без цифр після точки?
Маттіас Бургер

1
@MatthiasBurger 123450 (p=6,s=0)був би поза діапазоном для десяткового поля з 5 точністю (як зазначено в прикладі). Оскільки точність числа, яке ви хочете зберегти в полі, має бути меншим або рівним точності поля.
Snozzlebert

26

Точність, масштаб і довжина в документації на SQL Server 2000 звучить:

Точність - це кількість цифр у числі. Масштаб - це кількість цифр праворуч від десяткової крапки в числі. Наприклад, число 123,45 має точність 5 і шкала 2.


Дякую. Я щойно зрозумів, що фрагмент коду Delphi / Pascal використовує шкалу 0 для відсікання десяткової частини поплавця
peterchaula
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.