我在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都存在此问题
答案 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
谢谢,