Почему инструкция select ниже возвращает два разных значения?Значение десятичного присваивания t-sql
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
Почему инструкция select ниже возвращает два разных значения?Значение десятичного присваивания t-sql
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
Это хорошо для литералов как 1.0, но если вы тянете данные из столбцов таблицы, необходимо, чтобы бросить/преобразовать первое оцененного числа в вашем уравнении:
convert(decimal, [col1])/([col2] + [col3])
-или-
convert(decimal(15, 2), [col1])/([col2] + [col3])
Я узнал от коллеги так же, как я разместил это.
Вам необходимо указать точность и масштаб по умолчанию.
Это работает в этом сценарии: объявить @tempDec десятичной (3,2)
Из MSDN:
десятичного [(р [, S])] и числовое [(р [, с])] Исправлена точность и масштабные номера. Когда используется максимальная точность, допустимые значения составляют от -10^38 +1 до 10^38-1. Синонимы SQL-92 для десятичного числа - dec и dec (p, s). numeric функционально эквивалентен десятичной.
p (precision) Максимальное общее количество десятичных цифр, которое может быть сохранено как слева, так и справа от десятичной точки. Точность должна быть от 1 до максимальной точности 38. Точность по умолчанию равна 18.
s (шкала) Максимальное количество десятичных цифр, которое может храниться справа от десятичной точки. Масштаб должен быть значением от 0 до p. Масштаб может быть указан только в том случае, если задана точность. Шкала по умолчанию - 0; поэтому 0 < = s < = p. Максимальные размеры хранилища варьируются в зависимости от точности.
То есть нулевая шкала в локальной переменной удаляет данные после точки хранения – gbn 2008-11-14 19:13:54