I have a requirement to calculate percentage of a series of numbers balances in this case, rounded to 10 decimal places, but they must total 1.0000000000 (or 100.0000000000%). I can get 0.9999999998 or 1.0000000004, but I cannot seem to get it to 1.0. Is there something else I can do?
create table balances (balance number);
insert into balances (balance) select 27544020.38 from dual;
insert into balances (balance) select 3161670.46 from dual;
insert into balances (balance) select 13085937.87 from dual;
insert into balances (balance) select 0 from dual;
insert into balances (balance) select 0 from dual;
insert into balances (balance) select 478033.04 from dual;
insert into balances (balance) select -85126.17 from dual;
insert into balances (balance) select 44968439.88 from dual;
insert into balances (balance) select 78155926.33 from dual;
insert into balances (balance) select -3662788.36 from dual;
insert into balances (balance) select 234328177.96 from dual;
insert into balances (balance) select 103694040.23 from dual;
insert into balances (balance) select 85295156.11 from dual;
insert into balances (balance) select 155627180.9 from dual;
insert into balances (balance) select 133311464.77 from dual;
insert into balances (balance) select 56306616.42 from dual;
insert into balances (balance) select 135204546.73 from dual;
insert into balances (balance) select 188572856.42 from dual;
insert into balances (balance) select 118208964.69 from dual;
insert into balances (balance) select 87751901.55 from dual;
insert into balances (balance) select 947 from dual;
insert into balances (balance) select 61190729.16 from dual;
insert into balances (balance) select 35307571.39 from dual;
insert into balances (balance) select 32229181.69 from dual;
insert into balances (balance) select 27544020.38 from dual;
insert into balances (balance) select 3161670.46 from dual;
insert into balances (balance) select 13085937.87 from dual;
I am calculating the percentage of this group of balances with:
ratio_to_report(balance) over ()
and rounding it to 10 decimal places with:
round(ratio_to_report(balance) over (), 10)
When I run a query like:
select balance, ratio_to_report(balance) over (), round(ratio_to_report(balance) over (), 10) as pctg
from balances;
This result looks good, but when I go to check the sum(pctg) via:
select sum(pctg) from
(
select balance,
ratio_to_report(balance) over (),
round(ratio_to_report(balance) over (), 10) pctg
from balances
)
I get:
SUM(PCTG)
------------------
1.0000000004
Is there some other technique or function to always get sum of 1.0000000000 when adding decimal percentages rounded to 10 decimals?