SQL Server保留十进制小数位数和精度,用于对非常大的数字进行操作

问题描述 投票:0回答:1

跟随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)

sql sql-server largenumber
1个回答
0
投票
除以2等于乘以5并除以10。

我们无法将您的值乘以5,但是我们可以执行以下操作:

    整数除以10。
  • 乘以5。
  • 添加一些额外内容以弥补丢失的数字。
  • 但是。 。 。你在想。 。 。我们如何除以10?好吧,您可以使用

    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 <>小提琴。
  • © www.soinside.com 2019 - 2024. All rights reserved.