强制数字为 3 位小数

Force number to 3 decimals

我在 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 位小数,这是不正确的。

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

此外,您完全没有必要使用您一直在使用的 select ... from dual; PL/SQL 可以很轻松地处理数学函数,包括舍入。

也许这会给你一个线索,让你知道你需要做什么:

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),它都会自动正在转换为字符串。