在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。你如何实现/修改上述查询? 非常感谢!
答案 0 :(得分:2)
Excel不正确。 Oracle是对的。你真的确定你想要不正确的结果吗?
从逻辑上讲,您发布的数据的小数精度不超过两位数。添加和减去小数精度不超过两位数的数字,正确的结果不能超过两位小数精度。总和1.49012E-08(0.0000000149012)没有意义。考虑以美元和美分计算。如果您在支票账户中添加和减去以美元和美分计算的付款,您将永远不会以一分钱的一小部分结束。 Excel结果是因为它试图使用浮点数,在这种情况下,它的计算将不可避免地累积舍入误差。
如果您确实想强制Oracle计算累积舍入错误的结果,您可以尝试在执行求和之前将数据转换为float
或binary_float
数据类型。您获得与Excel获得的完全相同的舍入错误的可能性非常小,但您很可能会得到错误的非零结果,这反映了Oracle计算中引入的舍入错误。但是,你似乎不太可能想要一个不精确的结果。