TSQL Sum给出了错误的结果
我想得到数据的总和,但我得到了错误的结果 例1 例2 求和时的结果 从示例1中可以看到,其中p_键为11020145101617761,LC_金额为8.4168,-176.4,两者之和为0 与示例2中类似,其中p_键为1102014510615767,LC_金额为 -571067.53543873.8427193.69这两者之和也是0 但是当我使用p_键进行分组时,结果不是0TSQL Sum给出了错误的结果,sql,tsql,Sql,Tsql,我想得到数据的总和,但我得到了错误的结果 例1 例2 求和时的结果 从示例1中可以看到,其中p_键为11020145101617761,LC_金额为8.4168,-176.4,两者之和为0 与示例2中类似,其中p_键为1102014510615767,LC_金额为 -571067.53543873.8427193.69这两者之和也是0 但是当我使用p_键进行分组时,结果不是0 我不明白这背后的原因是什么。这是IEEE-754舍入错误的一个例子。请注意,这些数字都非常接近于零,但若要关闭,请参见
我不明白这背后的原因是什么。这是IEEE-754舍入错误的一个例子。请注意,这些数字都非常接近于零,但若要关闭,请参见指数 将您的
SUM
包装在ROUND()中
:
…应该这样做。发生这种情况是因为float不是真正的精确数字类型。 尝试使用
十进制(10,2)
类型以避免四舍五入错误
网络上有很多关于浮动类型的信息。我不明白,在你的问题中,你的结果显示该id为0。那么错误在哪里?请查找p_键1102014510615767,它给出的结果-6.18456397205591E-11非常接近0,但我现在看到的不完全是0,但是您的示例不包括这些数据,因此我们如何检查导致错误的原因。更改为数字或小数数字和小数也不起作用,round()起作用,非常感谢这对大多数人起作用,但仍然不完全是0,p_key=11020145101615767结果LC_金额_总和为-1E-10。有什么办法能让我准确地知道吗0@mb1987假设合适,将第二个参数从
10
更改为较小的数字,例如4或5。正确的解决方案,错误的推理float
通常与decimal
一样有效,并且decimal
不能消除所有舍入错误。(什么是1/3
?这意味着什么1/3*3
?)但是decimal
可以避免这些特殊的舍入问题,在这里似乎是合适的。
SELECT ROUND( SUM( LC_Amount ), 10 )