强制数为3位小数

时间:2015-03-18 14:48:30

标签: sql oracle plsql

我在Oracle PL / SQL中有以下代码:

    SELECT ROUND(iznos* postotak_prihod /100, 3) INTO prihod_f FROM DUAL;
           SELECT ROUND(iznos* postotak_fond /100, 3) INTO fond_f FROM DUAL;
           PP11 := prihod_f;
           SELECT ROUND(prihod_f, 2) INTO PP21 FROM DUAL;
           PP31 := PP11 - PP21;
           IF PP31 != 0 THEN
             prihod_f := prihod_f - 0.005;
             fond_f := fond_f + 0.005;
           END IF;

我需要将值prihod_f和fond_f保存为3位小数,否则我的计算结果不正确,并且始终保持2位小数,这是不正确的。

1 个答案:

答案 0 :(得分:2)

根据您对结果的实际操作,您可能只需要一个to_char()来将数字转换为字符串以供显示。

此外,您绝对不需要使用您一直使用的select ... from dual; PL / SQL可以很容易地处理数学函数,包括round。

也许这会给你一个关于你需要做什么的线索:

declare
  p_num1a number := 1.123;
  p_num2a number := 2.345;
  p_num1b number;
  p_num2b number;
  p_res number;
begin
   p_num1b := round(10/p_num1a, 3);
   dbms_output.put_line('1: p_num1b = '||p_num1b);

   p_num2b := round(10/p_num2a, 3);
   dbms_output.put_line('2: p_num2b = '||p_num2b);

   p_res := p_num1b - round(p_num1b, 2);
   dbms_output.put_line('3: p_res = '||p_res);

   if p_res != 0 then
     p_num1b := p_num1b - 0.005;
     dbms_output.put_line('4a: p_num1b = '||p_num1b);
     dbms_output.put_line('4b: p_num1b = '||to_char(p_num1b, 'fm999999999999.000'));

     p_num2b := p_num2b + 0.005;
     dbms_output.put_line('5: p_num2b = '||p_num2b);
   end if;
end;
/

请记住,只要您将存储为数字(或日期或...)的内容输出到屏幕上以供显示(无论是在数据网格中,还是通过dbms_output),它都会自动转换为字符串。