2013-12-16 45 views
0

在PL/SQL的一列中,我使用查询字符串甲骨文总和函数精度问题计算值

SELECT company, 
     SUM (holding_balance) AS total 
FROM Atable 
GROUP BY company 

holding balance 
0 
0 
-9173992.75 
8986565.87 
458448.13 
0 
-271021.25 
0 
-0.01 
0.01 
-191459114.33 
514040.08 
191459114.33 
1390695.05 
0 
-351838.55 
0 
0.01 
-1904735.13 
-5757.71 
357596.25 
0 
-124435850.66 
144710230.66 
-21629220.86 
0 
4966852.93 
4563987.5 
-8175999.57 
0 

查询返回0为总。但是,当我复制并将数据粘贴到Excel并使用总和时,它返回1.49012E-08。

我希望我的查询返回1.49012E-08。你如何实现/修改上述查询? 非常感谢!

回答

2

Excel不正确。 Oracle是正确的。你真的确定你想要不正确的结果吗?

逻辑上,您发布的数据不超过两位数的小数精度。加上和减去不超过两位数的小数精度的数字,正确的结果不能超过两位数的小数精度。 1.49012E-08(0.0000000149012)的总和没有意义。想想美元和美分的计算。如果您在支票账户中添加和减去以美元和美分计的付款,那么您永远不会得到一分钱的余额。 Excel的结果是因为它试图使用浮点数,在这种情况下,它的计算将不可避免地累积舍入误差。

如果您确实想强制Oracle计算累计舍入错误的结果,则可以在执行求和之前将数据转换为floatbinary_float数据类型。您很可能得不到与Excel相同的舍入误差,但您很可能会得到一个不正确的非零结果,该结果反映了Oracle计算中引入的舍入误差。但是,看起来确实不太可能,你想要一个不精确的结果。