我在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位小数,这是不正确的。
答案 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),它都会自动转换为字符串。