gpt4 book ai didi

sql - SQL Server 2008中公式的额外括号改变结果

转载 作者:行者123 更新时间:2023-12-02 23:22:15 24 4
gpt4 key购买 nike

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

最佳答案

如果将每个值声明为Float,您将获得所需的结果。

DECLARE @Float1 float, @Float2 float, @Float3 float;
SET @Float1 = 0.55;
SET @Float2 = 287.61;
SET @Float3 = 0.66;

select (@Float1 * @Float2 / @Float3) calc_no_parens
,(@Float1* (@Float2/ @Float3)) calc_parens
,round(@Float1 * @Float2/ @Float3,2) no_paren_round
,round(@Float1* (@Float2/ @Float3),2) paren_round;

输出

calc_no_parens  calc_parens no_paren_round  paren_round
239.675 239.675 239.68 239.68

您可能想查看这篇文章:So-called "exact" numerics are not at all exact!

关于sql - SQL Server 2008中公式的额外括号改变结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com