0

在 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

知道为什么会这样吗?建议修复它?

4

2 回答 2

3

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

浮点数,以及随后的算术,都是近似的。如果您想要精确的结果,请使用具有适当精度和小数位数的 DECIMAL 或 NUMERIC 数据类型,而不是 FLOAT。

于 2013-10-16T21:55:02.930 回答
0

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

如果您想阅读,这里有一篇维基百科文章。-> 浮点数

现在我不鼓励你使用浮点数吗?如果您只是求和而不打算在总和中进行乘法或除法,我建议将其转换为小数。否则,继续将其转换为总和中的浮点数,但在一切完成后将其转换回十进制。特别是如果您尝试计算加权平均值。

于 2013-10-16T22:36:43.827 回答