【发布时间】:2012-09-09 07:09:05
【问题描述】:
在所有其他语言(通常是算术引擎)中,在相同优先级的运算符周围放置一组额外的括号不会影响结果。但最近在一个测试项目中,我注意到 MS SQL 服务器在这些情况下会改变结果。请查看下面的查询,如果您有任何想法(或 SQL Server 管理中的设置)或任何指向 MSDN 文章的链接来解释该行为,请告诉我。
select (0.55 * 287.61 / 0.66) calc_no_parens
,(0.55 * (287.61 / 0.66)) calc_parens
,round(0.55 * 287.61 / 0.66,2) no_paren_round
,round(0.55 * (287.61 / 0.66),2) paren_round;
结果
Column Record 1
calc_no_parens 239.6750000
calc_parens 239.67499985
no_paren_round 239.6800000
paren_round 239.67000000
对我来说,前两个应该返回 239.675,回合应该返回 239.68。
【问题讨论】:
-
答案有何不同?这可能只是一个浮点舍入/精度问题吗?
-
它们相差一小部分(请参阅我的问题中的更新)。但这在任何其他编程平台中都不是问题。但存在于 IBM DB2 和 MS SQL Server 中。我没有方便试用的 Oracle 服务器
标签: sql sql-server arithmetic-expressions