我想为浮点数添加一个值,但它不起作用。
我有一个浮点数,比如3.14,我想加0.005,但我得到3.14。
代码:
create or replace package pck_test is
PROCEDURE ArrondiGeo(coord_x IN FLOAT,coord_y IN FLOAT,temp_x OUT FLOAT);
end pck_test;
/
create or replace package body pck_test is
PROCEDURE ArrondiGeo(coord_x IN FLOAT,coord_y IN FLOAT,temp_x OUT FLOAT,temp_y OUT FLOAT)
IS
tp_x FLOAT;
BEGIN
tp_x := mod(coord_x*10000,10);
if(tp_x>50)
then
if(tp_x>75)
then
temp_x:=trunc(coord_x,2);
temp_x:=temp_x+0.01;
else
temp_x:=trunc(coord_x,2);
temp_x:=temp_x+0.005;
end if;
else
if(tp_x>25)
then
temp_x:=trunc(coord_x,2);
temp_x:=temp_x+0.005;
else
temp_x:=trunc(coord_x,2);
end if;
end if;
END;
END pck_test;
/
有谁知道它为什么不起作用?
答案 0 :(得分:3)
即使您在示例代码中保持一致,也许您在其余程序中混合了FLOAT
和BINARY_FLOAT
。
FLOAT
是NUMBER
的子类型,精度最高为38位。 0.005
是文字 float 。BINARY_FLOAT
是一个IEEE 754 floating point numbers,大致上是精确到7位小数。 0.005f
将是文字 binary_float 。见这个例子:
declare
w float := 3.14;
x float := 3.14*100000;
y binary_float := 3.14;
z binary_float := 3.14*100000;
begin
w := w + 0.005;
x := x + 0.005;
y := y + 0.005f;
z := z + 0.005f;
dbms_output.put_line(w);
dbms_output.put_line(x);
dbms_output.put_line(y);
dbms_output.put_line(z);
end;
产:
3.145
314000.005
3.14500022E+000
3.14E+005