跟随my previous question,我仍然在SQL Server 2017中遇到算术溢出错误。如何执行大decimal(38,0)
值的乘法/除法并保留/重新确定精度和小数位数?
在当前示例中,我只想将DECLARE @var1 decimal(38,0) = 85070591730234615865699536669866196992;
减半(如果@var1
为奇数,则截断结果)。从this post中我收集到,即使我不尝试除以2,而是乘以0.5,我仍然不会获得decimal(38,0)
结果。我可以除以2,000,000以使结果适合最终的decimal(38,6)
类型,但是考虑到multiplication rules etc.,我不知道如何返回decimal(38,0)
。
我们无法将您的值乘以5,但是我们可以执行以下操作:
string操作来做到这一点:只需截断最后一位:
declare @var1 decimal(38,0) = 85070591730234615865699536669866196992;
select (convert(decimal(38,0), left(convert(varchar(38), @var1), 37)) * 5 +
convert(decimal(38, 0), (@var1 % 10) / 2)
) as half_a_big_value
Here是db <>小提琴。