如何从以下两个查询中获得不同的结果? a,b,c是浮点数,我认为它们会返回相同的结果,但它们稍微偏离。
SELECT (a-b)+(c)
FROM
(
select sum([Actual Freight Per Line Amt]) a,
sum([fedex charge per line amt]) b,
sum([inbound freight cost]) c
from stg.invoices where year([gl date]) = '2016'
) foo
结果:-5822899.31314175
&安培;
SELECT SUM((a-b)+(c))
FROM
(
select [Actual Freight Per Line Amt] a,
[fedex charge per line amt] b,
[inbound freight cost] c
from stg.invoices where year([gl date]) = '2016'
) foo
结果:-5796251.59304654
答案 0 :(得分:5)
当您对许多浮点数进行算术运算时,排序很重要。一个典型的例子是:
1,000,000,000,000,000,000,000,000,000 + -1,000,000,000,000,000,000,000,000,000 + 38
如果评估为:
(1,000,000,000,000,000,000,000,000,000 + -1,000,000,000,000,000,000,000,000,000) + 38
你会得到38.“38”比其他数字小得多,浮点表示不能代表该值。
如果在以下位置进行评估:
1,000,000,000,000,000,000,000,000,000 + (-1,000,000,000,000,000,000,000,000,000 + 38)
你会得到0。
我建议您使用decimal
进行计算。
答案 1 :(得分:2)
您的任何值是否为NULL?
说,您有以下数据:
a b c
NULL 1 2
1 2 3
您的第一个查询将提供3的结果。
您的第二个查询将提供2的结果。
答案 2 :(得分:1)
欢迎来到花车世界 它不是大数字或小数字 这是关于这个数字的准确性限制'代表方法。
declare @t table (f float);
insert into @t(f) values (0.1),(0.2),(-0.2),(-0.1);
select sum(f) from @t;
2.77555756156289E-17
declare @t table (f float);
insert into @t(f) values (0.1),(0.2),(-0.3);
select sum(f) from @t;
5.55111512312578E-17