Почему SQL Server выдает ошибку арифметического переполнения при преобразовании int в числовой тип данных?
-
20-09-2019 - |
Вопрос
У меня выдает ошибку Студия управления SQL-сервером при запуске этого кода:
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))
все идет нормально.
Есть ли ограничение на числовой тип данных?
Решение
Числовое значение определяет ОБЩЕЕ количество цифр, а затем число после запятой.
Числовое значение (3,2) может содержать только до 9,99.
Другие советы
Давайте посмотрим, числовое (3,2).Это означает, что у вас есть три места для данных, и два из них находятся справа от десятичной запятой, а слева от десятичной запятой остается только одно.Число 15 имеет два знака слева от десятичной запятой.Кстати, если бы у вас было значение 100, я бы увеличил его до числового (5, 2).
NUMERIC(3,2)
означает:Всего 3 цифры, 2 после запятой.Таким образом, перед десятичной точкой у вас есть только один десятичный знак.
Пытаться NUMERIC(5,2)
- три до, два после запятой.
Точность и масштаб часто понимаются неправильно.В numeric(3,2) вам нужно всего 3 цифры, но 2 справа от десятичной точки.Если вы хотите 15 => 15,00, то ведущая 1 вызывает переполнение (поскольку, если вам нужны 2 цифры справа от десятичной дроби, слева останется место только для еще одной цифры).С 4,2 проблем нет, потому что все 4 цифры подходят.