Вот ваша проблема:
declare @compliance decimal(10,5)
set @compliance = 100.0 -- <----------------
select CAST(FLOOR(@compliance *10)/10.0 AS DECIMAL(3,1))
Выдает «Ошибка арифметического переполнения при преобразовании чисел в тип данных числовой».Изменение на DECIMAL(4,1)
работает, или, как предлагает @paola, измените ваше условие на >= 100.0
decimal(p,s):
p (точность) - это максимальное общее количество десятичных цифр, которые будут сохранены;слева и справа от десятичной точки.Точность должна быть от 1 до максимальной точности 38. Точность по умолчанию - 18.
s (шкала) - это количество десятичных цифр, которое будет сохранено справа от десятичной точки.Это число вычитается из p, чтобы определить максимальное количество цифр слева от десятичной точки.
В вашем случае decimal(3, 1)
означает всего 3 цифры с 1 цифрой справа отдесятичная точка,
99.9
, тогда как decimal(4,1)
предоставляет всего 4 цифры с 1 цифрой справа от десятичной точки,
999.9