pre*_*se6 4 sql t-sql sql-server
如何从以下两个查询中获得不同的结果?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
Run Code Online (Sandbox Code Playgroud)
结果:-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
Run Code Online (Sandbox Code Playgroud)
结果:-5796251.59304654
当你对很多浮点数进行算术运算时,顺序很重要.一个典型的例子是:
1,000,000,000,000,000,000,000,000,000 + -1,000,000,000,000,000,000,000,000,000 + 38
Run Code Online (Sandbox Code Playgroud)
如果评估为:
(1,000,000,000,000,000,000,000,000,000 + -1,000,000,000,000,000,000,000,000,000) + 38
Run Code Online (Sandbox Code Playgroud)
你会得到38."38"比其他数字小得多,浮点表示不能代表该值.
如果评估时间如下:
1,000,000,000,000,000,000,000,000,000 + (-1,000,000,000,000,000,000,000,000,000 + 38)
Run Code Online (Sandbox Code Playgroud)
你会得到0.
我建议您使用decimals进行计算.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |