更改行的插入顺序后SQL Server中的行总和不正确

时间:2017-05-02 07:25:22

标签: sql sql-server

我在SQL Server数据库中有2个表。我在两个表中插入相同的值,唯一的区别是插入顺序。

样本值:

-422.82, 422.82, -407.78, 407.78

SUM表的ztFloat2错误。

我检查了两个表的DATA PAGES。所有插槽值都相同。它是经典的float数据类型问题还是SQL Server BUG?

CREATE TABLE ztFloat1 ([Qty] [float] NOT NULL)

insert into ztFloat1 select -422.82
insert into ztFloat1 select  422.82
insert into ztFloat1 select -407.78
insert into ztFloat1 select  407.78

select SUM(Qty) from ztFloat1 -- **RESULT = 0** 


CREATE TABLE ztFloat2([Qty] [float] NOT NULL)

insert into ztFloat2 select -422.82
insert into ztFloat2 select -407.78
insert into ztFloat2 select  422.82
insert into ztFloat2 select  407.78

select SUM(Qty) from ztFloat2  --  **RESULT =-1,13686837721616E-13**

注意:所有版本的SQL Server都存在此问题

2 个答案:

答案 0 :(得分:1)

浮点数和实数数据类型称为近似数据类型。

参考链接:https://technet.microsoft.com/en-us/library/ms187912(v=sql.105).aspx

您可以通过转换为完整的小数字来解决此问题,例如,

SELECT CAST(SUM(Qty) AS NUMERIC(18,6)) FROM ztFloat2 

答案 1 :(得分:0)

好问题。您需要为ztFloat2定义浮点值,如下所示

grid.panel.columns[cellIndex-1]

如果定义浮点值大于25,它将以指数格式显示结果。以下链接很有用。

https://www.toadworld.com/platforms/sql-server/w/wiki/10177.data-types-approximate-numeric

谢谢,