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

У меня есть ошибка, будучи брошенным Studio управления SQL Server при выполнении этого кода:

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))

все идет прекрасное.

Существует ли ограничение для типа числовых данных?

66
задан Junior M 13 January 2010 в 18:18
поделиться

4 ответа

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

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

128
ответ дан 24 November 2019 в 14:50
поделиться

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

-121--916709-
isGroup = @"^(true|false)$"

Так что...

routes.MapRoute(
  "MenuRouteWithExtension",
  "Menu.mvc/{action}/{projectId}/{dealerId}/{isGroup}",
  new
  {
    controller = "Menu",
    action = "RedirectUrl",
    projectId = "",
    dealerId = "",
    isGroup = "" //Possibly set this to 'true' or 'false'?
  },
  new
  {
    projectId = @"^\d+$",
    dealerId = @"^\d+$",
    isGroup = "^(true|false)$"
  }
);

Обсадная труба не должна иметь значения, поэтому следует принять значение True , а также falSE .

Кроме того, я поместил ^ и $ в значения regex, чтобы они не совпадали, например blahtrueblah .

-121--4167135-

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

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

18
ответ дан 24 November 2019 в 14:50
поделиться

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

16
ответ дан 24 November 2019 в 14:50
поделиться

Целые числа между-1 и 255 (?), а также опечатки последовательности, интернированы. Каждый экземпляр в источнике фактически представляет один и тот же объект.

В CPython результатом id () является адрес в пространстве процесса PyObject.

-121--3080501-

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

27
ответ дан 24 November 2019 в 14:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: