Подтвердить что ты не робот

Почему SQL Server выбрасывает арифметическую ошибку переполнения, преобразуя int в тип данных числовой?

У меня есть ошибка, которую 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))

все идет хорошо.

Есть ли ограничение на числовой тип данных?

4b9b3361

Ответ 1

Числовое задает TOTAL количество цифр, а затем число после десятичного числа.

Числовое (3,2) может содержать только 9.99.

Ответ 2

Посмотрим, числовое (3,2). Это означает, что у вас есть 3 места для данных, а два из них находятся справа от десятичной дроби, оставляя только одну слева от десятичной. 15 имеет два места слева от десятичной дроби. BTW, если у вас может быть 100 в качестве значения, я бы увеличил его до числового (5, 2)

Ответ 3

NUMERIC(3,2) означает: всего 3 цифры, 2 после десятичной точки. Таким образом, у вас есть только одна десятичная цифра до десятичной точки.

Попробуйте NUMERIC(5,2) - три раньше, два после десятичной точки.

Ответ 4

Точность и масштаб часто недопонимаются. В числовом (3,2) вам нужно 3 цифры в целом, но 2 справа от десятичной. Если вы хотите 15 = > 15.00, поэтому ведущий 1 вызывает переполнение (поскольку, если вы хотите, чтобы две цифры справа от десятичной точки, есть только комната слева для еще одной цифры). С 4,2 нет проблем, потому что все 4 цифры подходят.