求和行然后计算公式与逐行计算公式然后求和

时间:2015-03-10 12:54:19

标签: sql-server tsql math

我有愚蠢的数学问题。在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

1 个答案:

答案 0 :(得分:2)

使用运营商优先级规则以及您的号码类型进行计算。

第一个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个很棒的链接可以帮到你:{ {3}}和https://stackoverflow.com/a/424052/4584335