alexandria-plsql-utils/ora/math_util_pkg.pkb
2015-02-20 19:43:42 +01:00

106 lines
2.0 KiB
Plaintext
Executable File

create or replace package body math_util_pkg
as
/*
Purpose: Package handles general math functionality
Remarks:
Who Date Description
------ ---------- -------------------------------------
MBR 22.09.2006 Created
*/
function safediv (p_value_1 in number,
p_value_2 in number) return number
as
l_returnvalue number;
begin
/*
Purpose: safe division by zero
Remarks:
Who Date Description
------ ---------- -------------------------------------
MBR 22.09.2006 Created
*/
if p_value_2 = 0 then
l_returnvalue:=0;
else
l_returnvalue:=p_value_1 / p_value_2;
end if;
return l_returnvalue;
end safediv;
function get_fnum (p_value in number,
p_decimals in number := 2) return number
as
l_returnvalue number;
begin
/*
Purpose: get number formatted with specified number of decimals
Remarks:
Who Date Description
------ ---------- -------------------------------------
MBR 22.09.2006 Created
*/
return round(p_value, p_decimals);
end get_fnum;
function is_within_pct_of_value (p_value1 in number,
p_value2 in number,
p_pct in number) return boolean
as
l_returnvalue boolean;
l_pct_value number;
begin
/*
Purpose: return true if value is within given percentage of other value
Remarks: for example, 90 (and 110) is within 10 percent of 100
Who Date Description
------ ---------- -------------------------------------
MBR 22.09.2006 Created
*/
l_pct_value := nvl(p_value2,0) * nvl(p_pct / 100,0);
if p_value1 between (p_value2 - l_pct_value) and (p_value2 + l_pct_value) then
l_returnvalue := true;
else
l_returnvalue := false;
end if;
return l_returnvalue;
end is_within_pct_of_value;
end math_util_pkg;
/