decimal и numeric (Transact-SQL)
Типы числовых данных с фиксированными точностью и масштабом.
decimal [ **(**p[ **,**s] )] и numeric[ **(**p[ **,**s] )]
Числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от -10^38+1 до 10^38-1. Синонимами по стандарту ISO для decimal являются dec и dec(p, s). numeric функционально эквивалентно decimal.p (точность)
Максимальное количество десятичных разрядов числа (как слева, так и справа от десятичной запятой), которые будут храниться. Точность должна быть значением в диапазоне от 1 до максимум 38. Точность по умолчанию составляет 18.s (масштаб)
Максимальное количество хранимых десятичных разрядов числа справа от десятичной запятой. Это число отнимается от p для определения максимального количества цифр слева от десятичной запятой. Масштаб может принимать значение от 0 до p. Масштаб может быть указан только совместно с точностью. По умолчанию масштаб принимает значение 0; поэтому 0 <= s <= p. Максимальный размер хранилища зависит от точности.Точность
Байты хранилища
1 - 9
5
10-19
9
20-28
13
29-38
17
Преобразование данных типов decimal и numeric
Для типов данных decimal и numeric SQL Server обрабатывает каждое конкретное сочетание точности и масштаба как различные типы данных. Например, значения decimal(5,5) и decimal(5,0) считаются разными типами данных.
В инструкциях Transact-SQL константа с десятичным разделителем автоматически преобразуется в значение типа данных numeric с минимально необходимой точностью и масштабом. Например, константа 12,345 преобразуется в значение numeric с точностью 5 и масштабом 3.
Преобразование типа данных decimal или numeric в тип float или real может привести к потере точности. Преобразование типов данных int, smallint, tinyint, float, real, money или smallmoney в тип decimal или numeric может вызвать переполнение.
По умолчанию SQL Server использует округление с потерей точности и масштаба при преобразовании числа в значение decimal или numeric. Однако при включенном (ON) параметре SET ARITHABORT в случае переполнения SQL Server вызывает ошибку. Для возникновения ошибки недостаточно только потери точности и масштаба.
При преобразовании значений с плавающей запятой или действительных значений в десятичное или числовое, число десятичных разрядов в десятичном значении никогда не превышает 17. Любое значение с плавающей запятой < 5E-18 преобразуется в 0.
См. также
Справочник
Функции CAST и CONVERT (Transact-SQL)
Инструкция CREATE TABLE (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)