从同一个表中乘以数字,Sybase中的结果不同

时间:2014-01-24 13:58:44

标签: sql sybase-ase

我有一个表,其中一列有浮点值。我必须将它们相乘才能得到结果。下面是一个例子,当我使用exp(sum(log。

)时,我会得到不同的结果

我做错了什么? 有没有其他方法可以这样做而不是取每个值并乘以光标?

select ( (1+ 0.01735538425366666)*(1+ 0.01768814252911706) -1) *100

declare @res numeric(38, 35), @v1 numeric(38, 35), @v2 numeric(38, 35)
select @v1=0.01735538425366666, @v2= 0.01768814252911706
select @res = ( (1+ @v1)*(1+ @v2) -1) *100
select @res

select (exp(Sum(log(1+a)))-1) * 100 from (select 0.01735538425366666 as a union select 0.01768814252911706 as a)aa

select (convert(numeric(38, 35), exp(convert(numeric(38, 35), Sum(convert(numeric(38, 35), log(convert(numeric(38, 35), 1+a)))))))-1) * 100 from (select 0.01735538425366666 as a union select 0.01768814252911706 as a)aa


-------------
create table #res(a numeric(38, 35), b float)
insert into #res (a, b)
select 0.01735538425366666, 0.01735538425366666 union
select 0.01768814252911706, 0.01768814252911706


select ((exp(sum(log(1+a))))-1) * 100 , ((exp(sum(log(1+b))))-1) * 100 from #res

--------------

&

select ( (1+ 0.01735538425366666)*(1+ 0.01768814252911706) -1) *100

应该给出相同的结果吗?

2 个答案:

答案 0 :(得分:1)

浮点算术在某个范围之外本质上是不准确的。这是一个进入gory detail的链接,但是在StackExchange或Web上通常会出现浮点问题,你会发现这很多。

浮点数对准确性有限制。

答案 1 :(得分:1)

这不会给你相同的结果。

在您使用的一个示例中:

select ( (1+ 0.01735538425366666)*(1+ 0.01768814252911706) -1) *100

在另一个示例中,您使用#res表运行聚合函数。

select ((exp(sum(log(1+a))))-1) * 100 , ((exp(sum(log(1+b))))-1) * 100 from #res