DB2上的sum()舍入错误

时间:2013-10-16 21:42:55

标签: sql db2

在DB2上添加一列时,我得到了一个糟糕的结果。数据是一个字符串,我将它传递给float()然后传递给sum()。

该集合如下所示:

 AMOUNT
 --------
 0.100   
 0.250   
 0.500   
 0.050   
 0.150   
 0.150   
 0.150   
 0.600   
 0.600   
 0.150 

当我添加它时,我得到了错误的结果:

1>          select
2>              sum(float(amount)) as sum_amount
3>          from 
4>              TABLE
5>          where
6>              [CONDITIONS]
13> go
 SUM_AMOUNT
 ------------------
 2.6999999999999997

知道为什么会这样吗?建议解决它?

2 个答案:

答案 0 :(得分:3)

你的答案是FLOAT,因为输入值是FLOAT。

浮点数和随后的算术是近似值。如果需要精确结果,请使用具有适当精度和比例的DECIMAL或NUMERIC数据类型,而不是FLOAT。

答案 1 :(得分:0)

简短回答是所有数据在内部表示为二进制而非十进制。因此,分数以二进制格式“舍入”或更适当地截断。这就是为什么你看到你所看到的。

如果你想阅读,这是一篇维基百科文章。 - > Floating point

现在我不鼓励你使用浮动?如果你只是求和而不是计划在总和中乘以或除以,我建议将其转换为十进制。否则,继续在总和中将其转换为float,但在完成所有操作后将其强制转换为十进制。特别是如果您正在尝试计算加权平均值。