Sql server SQL幂函数不适用于高数字

Sql server SQL幂函数不适用于高数字,sql-server,function,Sql Server,Function,如果我尝试执行此查询: SELECT POWER(CONVERT(DECIMAL(30,0), 64), 10) 我收到: 1152921504606847000 这是不对的。正确的结果是: 1152921504606846976 我如何才能得到正确的结果?这是由于计算的精度。您可以有非常大的数字,但精度会降低,因为您只有固定数量的位来存储您的值 如果需要正确的结果,可以手动计算 即 声明@res bigint,@i int 选择@res=64、@i=1 虽然@i是在浮点数(或可以转换为浮

如果我尝试执行此查询:

SELECT POWER(CONVERT(DECIMAL(30,0), 64), 10)
我收到:

1152921504606847000
这是不对的。正确的结果是:

1152921504606846976

我如何才能得到正确的结果?

这是由于计算的精度。您可以有非常大的数字,但精度会降低,因为您只有固定数量的位来存储您的值


如果需要正确的结果,可以手动计算

声明@res bigint,@i int
选择@res=64、@i=1
虽然@i是在浮点数(或可以转换为浮点数的值)上定义的,但不是在十进制上定义的,所以你必须接受它是用浮点数而不是小数来进行计算的。
select cast(power(convert(float(30), 64), 10) as bigint)
declare @res bigint, @i int
select @res = 64, @i = 1

while @i<10
begin
    select @res = @res * 64, @i=@i+1    
end
select @res