我正在使用Pl / Sql开发人员在我们的一个Oracle数据库上调试问题并发现了这个问题。
这是我在Pl / SQL上运行的select语句:
SELECT 24*(t.plan_f_date - t.plan_s_date),
t.plan_hrs,
24*(t.plan_f_date - t.plan_s_date) - t.plan_hrs
FROM active_Separate t
WHERE t.wo_no = 613484;
这是我得到的结果:
-----------------------
a b c
-----------------------
.5 .5 8E-40
只要看一下,a = .5和b = .5;因此a-b(即c)应为0,但它是8E-40。
以前有人见过这个问题吗?
Plan_hrs的类型为NUMBER,plan_f_date和plan_s_date的类型均为DATE。
提前致谢。
答案 0 :(得分:5)
我假设你的查询别名如下:
SELECT 24*(t.plan_f_date - t.plan_s_date) as a,
t.plan_hrs as b,
24*(t.plan_f_date - t.plan_s_date) - t.plan_hrs as c
FROM ...
我能够使用以下测试数据生成类似的结果:
WITH testdata AS (
select to_date('00:30','HH24:MI') as plan_f_date
,to_date('00:00','HH24:MI') as plan_s_date
,0.5 AS plan_hrs
from dual
)
SELECT 24*(t.plan_f_date - t.plan_s_date) as a,
t.plan_hrs as b,
24*(t.plan_f_date - t.plan_s_date) - t.plan_hrs as c
FROM testdata t;
a: 0.4999999999999999999999999999999999999992
b: 0.5
c: -0.0000000000000000000000000000000000000008
这些不准确的结果是因为日期精确到秒,日期的减法返回一个数字,其中1 = 1天,最小单位(1秒)等于大约0.00001157407407407407407407407407407407407407一天,所以你是一旦你对结果进行乘法运算,就会发现小错误。
因此,您可能需要将结果舍入为0(零)。