Plsql 计算一列值时Oracle求和函数精度问题

Plsql 计算一列值时Oracle求和函数精度问题,plsql,oracle11g,Plsql,Oracle11g,在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 -

在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并使用sum时,它返回1.49012E-08

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

Excel不正确。甲骨文是正确的。你真的确定你想要的结果不正确吗

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

如果确实要强制Oracle计算累积舍入错误的结果,可以尝试在求和之前将数据强制转换为
float
binary\u float
数据类型。您不太可能得到与Excel完全相同的舍入误差,但很可能会得到一个不正确的非零结果,该结果反映了Oracle计算中引入的舍入误差。不过,您希望得到不精确的结果似乎真的不太可能