在所有其他语言(通常是算术引擎)中,在相同优先级的运算符周围放置一组额外的括号不会影响结果。但最近在一个测试项目中,我注意到 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。