sql-server - 行求和然后计算公式 vs 逐行计算公式然后求和

标签 sql-server t-sql 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

最佳答案

计算是根据运营商优先级规则以及号码类型完成的。

第一个选择 (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/4584335https://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx

关于sql-server - 行求和然后计算公式 vs 逐行计算公式然后求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964267/

相关文章:

sql - 开发递归/层次结构查询

sql-server - NVARCHAR(MAX) 是否比 NVARCHAR(N) 消耗更多存储空间(物理大小)

计算e^x的C++程序

sql-server - 您在 SQL Server 存储过程中使用什么缩进样式?

sql-server - 如何使用 SQL Server 存储过程(计划每周运行)的结果来分析一段时间内的数据趋势?

mysql - 更新mysql中的查询与mssql中的结果不一样

c# - 如何使用 NHibernate QueryOver 计算给定出生日期的年龄

sql - UPDATE 命令 SET @return = [int_a] = [int_a] + auto_increment WHERE <子句​​>

java - Android 应用程序 - 将用户输入的值乘以和除以两种形式的值

python - 为什么十进制乘法有点不准确?