对行求和然后计算公式 vs 逐行计算公式然后求和

Sum rows and then calculate formula vs calculate formula row by row and then sum

我有一道愚蠢的数学题。在 T-SQL 中,为什么这两个总和不同:

select (34.3+17.5 + 13.5)/31.0*28.0   --= 58.9806280

select 34.3/31.0*28.0 + 17.5/31.0*28.0 + 13.5/31.0*28.0  --= 58.9806000

根据运算符优先级规则和您的号码类型进行计算。

第一个 select (34.3+17.5 + 13.5)/31.0*28.0 分 3 步完成:

  • select (34.3 + 17.5 + 13.5) -- = 65.3
  • select 65.3 / 31.0 -- = 2.106451
  • select 2.106451 * 28.0 -- = 58.9806280

第二个是这样做的:

  • 划分优先级: select 34.3 / 31.0 -- = 1.106451 select 17.5 / 31.0 -- = 0.564516 select 13.5 / 31.0 -- = 0.435483
  • 然后: select 1.106451 * 28.0 -- = 30.9806280 select 0.564516 * 28.0 -- = 15.8064480 select 0.435483 * 28.0 -- = 12.1935240
  • 最后:select 30.9806280 + 15.8064480 + 12.1935240 -- = 58.9806000

如果你更深入,也可以看看这个:

select cast(34.3 as float)/31.0*28.0 + 17.5/31.0*28.0 + 13.5/31.0*28.0
-- => 58,9806451332903

我的英语不太好,其他人已经指出了您的要求,所以如果您想知道为什么数字会这样四舍五入,有 2 个很棒的链接可以帮助您: and https://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx