यह प्रलेखित नहीं है, इसलिए यह बदल सकता है।
ये रहे मेरे round_half_even(numeric,integer)
:
create or replace function round_half_even(val numeric, prec integer)
returns numeric
as $$
declare
retval numeric;
difference numeric;
even boolean;
begin
retval := round(val,prec);
difference := retval-val;
if abs(difference)*(10::numeric^prec) = 0.5::numeric then
even := (retval * (10::numeric^prec)) % 2::numeric = 0::numeric;
if not even then
retval := round(val-difference,prec);
end if;
end if;
return retval;
end;
$$ language plpgsql immutable strict;
और round_half_odd(numeric,integer)
:
create or replace function round_half_odd(val numeric, prec integer)
returns numeric
as $$
declare
retval numeric;
difference numeric;
even boolean;
begin
retval := round(val,prec);
difference := retval-val;
if abs(difference)*(10::numeric^prec) = 0.5::numeric then
even := (retval * (10::numeric^prec)) % 2::numeric = 0::numeric;
if even then
retval := round(val-difference,prec);
end if;
end if;
return retval;
end;
$$ language plpgsql immutable strict;
वे प्रति सेकंड लगभग 500000 आमंत्रणों का प्रबंधन करते हैं, जो एक मानक round(numeric,integer)
की तुलना में 6 गुना धीमा है। . वे शून्य और नकारात्मक परिशुद्धता के लिए भी काम करते हैं।