为什么当组浮点值加起来应为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 |