在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
知道为什么会这样吗?建议解决它?
答案 0 :(得分:3)
你的答案是FLOAT,因为输入值是FLOAT。
浮点数和随后的算术是近似值。如果需要精确结果,请使用具有适当精度和比例的DECIMAL或NUMERIC数据类型,而不是FLOAT。
答案 1 :(得分:0)
简短回答是所有数据在内部表示为二进制而非十进制。因此,分数以二进制格式“舍入”或更适当地截断。这就是为什么你看到你所看到的。
如果你想阅读,这是一篇维基百科文章。 - > Floating point
现在我不鼓励你使用浮动?如果你只是求和而不是计划在总和中乘以或除以,我建议将其转换为十进制。否则,继续在总和中将其转换为float,但在完成所有操作后将其强制转换为十进制。特别是如果您正在尝试计算加权平均值。