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