Почему SQL Server выдает ошибку арифметического переполнения при преобразовании int в тип данных numeric?
у меня есть ошибка, вызванная среда SQL Server Management Studio при выполнении этого кода:
declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))
но когда я меняю числовое объявление на
declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
все идет хорошо.
существует ли ограничение для числового типа данных?
4 ответов
Numeric определяет общее количество цифр,а затем число после десятичного знака.
число (3,2) может содержать только до 9,99.
давайте посмотрим, числовой (3,2). Это означает, что у вас есть 3 места для данных, и два из них находятся справа от десятичного знака, оставляя только один слева от десятичного знака. 15 имеет два знака слева от запятой. Кстати, если у вас может быть 100 в качестве значения, я бы увеличил это до числового (5, 2)
NUMERIC(3,2)
означает: всего 3 цифры, 2 после десятичной точки. Таким образом, у вас есть только один десятичный знак перед десятичной точкой.
попробовать NUMERIC(5,2)
- три до, два после запятой.
точность и масштаб часто не понимают. В числовом(3,2) вы хотите 3 цифры в целом, но 2 справа от десятичного знака. Если вы хотите 15 => 15.00, поэтому ведущий 1 вызывает переполнение (так как если вы хотите 2 цифры справа от десятичного знака, слева есть только место для еще одной цифры). С 4,2 нет проблем, потому что все 4 цифры подходят.