SQL Server保留十进制小数比例和精度,以便对非常大的数字执行操作
接下来,我仍在努力解决SQL Server 2017中的算术溢出错误。如何执行大小数38,0值的乘法/除法,并保留/恢复精度和小数位数SQL Server保留十进制小数比例和精度,以便对非常大的数字执行操作,sql,sql-server,largenumber,Sql,Sql Server,Largenumber,接下来,我仍在努力解决SQL Server 2017中的算术溢出错误。如何执行大小数38,0值的乘法/除法,并保留/恢复精度和小数位数 在我当前的示例中,我只想将DECLARE@var1 decimal38,0=8507059173023461586565695699536669866196992减半;如果@var1为奇数,则截断结果。从我收集的数据来看,即使我不尝试除以2,而是乘以0.5,我仍然不会得到小数点38,0的结果。我可以除以2000000,使结果符合最终的小数38,6类型,但考虑到这
在我当前的示例中,我只想将DECLARE@var1 decimal38,0=8507059173023461586565695699536669866196992减半;如果@var1为奇数,则截断结果。从我收集的数据来看,即使我不尝试除以2,而是乘以0.5,我仍然不会得到小数点38,0的结果。我可以除以2000000,使结果符合最终的小数38,6类型,但考虑到这个问题,我不知道如何回到小数38,0。这个答案针对您的特定问题-除以2。如果你想要一个更普遍的解决方案,请提出一个新问题 除以2等于乘以5再除以10 我们无法将您的值乘以5,但我们可以执行以下操作: 整数除以10。 乘以5。 加上一点额外的数字来解释丢失的数字。 但是。你在想。我们怎么能除以10呢?好的,你可以通过字符串操作来实现:只需截断最后一个数字:
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
是一个Dfiddle。如果要除法,为什么不将结果转换回小数38,0,并丢失所有已添加的小数?