为什么当组浮点值加起来应为0时,SQLSUM()函数返回非零总数?

我在使用 SQLSUM()函数时遇到了这个问题,我有三个总和等于零的值,如您所见,但使用该SUM()函数,答案是奇怪的值,如图所示。

Select Qty from Stock where ProductCode = '5LINE-15-1-30RU' 
    
Output : 
    
1. 49.72
2. -31.065
3. -18.655
    
Select SUM(Qty) from Stock where ProductCode = '5LINE-15-1-30RU'
    
Output : 
    
-3.5527136788005E-15

结果必须是 0 但我得到了这个尴尬的值。

Qty是一个float.

回答

您正在使用float将值存储为近似值的数据类型 cf

用于浮点数值数据的近似数数据类型。浮点数据是近似值;因此,并非数据类型范围内的所有值都可以准确表示。

对于需要精度的情况,例如,当您需要十进制/整数值时,您应该使用decimal/int数据类型。您很少会使用float. 如果您无法更改列数据类型,则可以在求和之前对其进行转换,例如

declare @Test table (Qty float);

insert into @Test (Qty)
values
(49.72),
(-31.065),
(-18.655);

select sum(Qty), sum(convert(money,Qty)) from @Test;

返回:

浮点数 换算总和
-3.5527136788005E-15 0.00

以上是为什么当组浮点值加起来应为0时,SQLSUM()函数返回非零总数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>