PL / SQL浮点数加法

时间:2014-12-17 15:55:57

标签: plsql add

我想为浮点数添加一个值,但它不起作用。

我有一个浮点数,比如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;
/

有谁知道它为什么不起作用?

1 个答案:

答案 0 :(得分:3)

即使您在示例代码中保持一致,也许您在其余程序中混合了FLOATBINARY_FLOAT

  • FLOATNUMBER的子类型,精度最高为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