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

StackOverflow https://stackoverflow.com/questions/2059134

Вопрос

У меня выдает ошибку Студия управления 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 цифры подходят.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top