Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server保留十进制小数比例和精度,以便对非常大的数字执行操作_Sql_Sql Server_Largenumber - Fatal编程技术网

SQL Server保留十进制小数比例和精度,以便对非常大的数字执行操作

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类型,但考虑到这

接下来,我仍在努力解决SQL Server 2017中的算术溢出错误。如何执行大小数38,0值的乘法/除法,并保留/恢复精度和小数位数


在我当前的示例中,我只想将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,并丢失所有已添加的小数?