У меня есть следующий столбец, указанный в базе данных: десятичный (5,2)
Как можно это интерпретировать?
В соответствии со свойствами столбца, которые отображаются в SQL Server Management Studio, я вижу, что это означает: десятичное число (точность чисел, числовой масштаб).
Что означают точность и масштаб в реальном выражении?
Было бы легко интерпретировать это как десятичную с 5 цифрами и двумя десятичными разрядами ... т.е. 12345.12
PS Мне удалось определить правильный ответ от коллеги, но мне было очень трудно найти ответ в Интернете. Поэтому я хотел бы, чтобы вопрос и ответ были задокументированы здесь на stackoverflow для дальнейшего использования.
Точность числа - это количество цифр.
Шкала числа - это количество цифр после десятичной точки.
При настройке точности и масштаба определения полей обычно подразумевается, что они представляют максимальные значения.
Например, десятичное поле, определенное с
precision=5
иscale=2
позволило бы следующие значения:123.45
(Р = 5, с = 2)12.34
(Р = 4, с = 2)12345
(Р = 5, с = 0)123.4
(Р = 4, с = 1)0
(Р = 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
...источник
12345000
? Точность 5 или 8? Если 5, с какой шкалой? Шкала -3?123450 (p=6,s=0)
вне диапазона? 123450 имеет 6 цифр и без цифры после точки?123450 (p=6,s=0)
будет вне диапазона для десятичного поля с точностью 5 (как упомянуто в примере). Потому что точность числа, которое вы хотите сохранить в поле, должна быть меньше или равна точности поля.Точность, масштаб и длина в документации по SQL Server 2000 гласят:
источник