Почему 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 цифры подходят.