0

如果我尝试执行此查询:

SELECT POWER(CONVERT(DECIMAL(30,0), 64), 10)

我收到:

1152921504606847000

那是不正确的。正确的结果是:

1152921504606846976

我怎样才能收到正确的结果?

4

3 回答 3

2
select cast(power(convert(float(30), 64), 10) as bigint)
于 2012-10-19T07:56:33.233 回答
0

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

这是对情况的一个很好的解释

于 2012-10-19T07:48:48.140 回答
0

如果你想要正确的结果,你可以手动计算。

IE

declare @res bigint, @i int
select @res = 64, @i = 1

while @i<10
begin
    select @res = @res * 64, @i=@i+1    
end
select @res
于 2012-10-19T08:48:10.123 回答