Plsql PL/SQL浮点加法

Plsql PL/SQL浮点加法,plsql,add,Plsql,Add,我想给float添加一个值,但它不起作用 我有一个浮点数,比如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

我想给float添加一个值,但它不起作用

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

有人知道它为什么不工作吗?

即使您在示例代码中是一致的,也可能在程序的其余部分混合了
FLOAT
BINARY\u FLOAT

  • FLOAT
    NUMBER
    的子类型,精度高达38位
    0.005
    是一个文字浮点数
  • BINARY\u FLOAT
    是一种精度约为7位小数的二进制浮点运算
    0.005f
    将是一个文本二进制浮点数
请参见此示例:

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

学会了让你今天充满活力的小东西:-)