Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL Sum给出了错误的结果_Sql_Tsql - Fatal编程技术网

TSQL Sum给出了错误的结果

TSQL 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舍入错误的一个例子。请注意,这些数字都非常接近于零,但若要关闭,请参见

我想得到数据的总和,但我得到了错误的结果

例1

例2

求和时的结果

从示例1中可以看到,其中p_键为11020145101617761,LC_金额为8.4168,-176.4,两者之和为0

与示例2中类似,其中p_键为1102014510615767,LC_金额为 -571067.53543873.8427193.69这两者之和也是0

但是当我使用p_键进行分组时,结果不是0


我不明白这背后的原因是什么。

这是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 )