我有一道愚蠢的数学题。在 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
最佳答案
计算是根据运营商优先级规则以及号码类型完成的。
第一个选择 (34.3+17.5 + 13.5)/31.0*28.0
分 3 步完成:
选择 (34.3 + 17.5 + 13.5) -- = 65.3
选择 65.3/31.0 -- = 2.106451
选择 2.106451 * 28.0 -- = 58.9806280
第二个是这样完成的:
- 划分的优先级:
选择 34.3/31.0 -- = 1.106451 选择 17.5/31.0 -- = 0.564516 选择 13.5/31.0 -- = 0.435483
- 然后:
选择 1.106451 * 28.0 -- = 30.9806280 选择 0.564516 * 28.0 -- = 15.8064480 选择 0.435483 * 28.0 -- = 12.1935240
- 最后:
选择 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
我的英语不太好,而且其他人已经指出了你的要求,所以如果你想知道为什么数字会这样四舍五入,有两个很棒的链接可以帮助你:https://stackoverflow.com/a/424052/4584335和 https://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx
关于sql-server - 行求和然后计算公式 vs 逐行计算公式然后求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964267/