【发布时间】:2020-07-31 20:48:49
【问题描述】:
在这种情况下,我需要计算一系列数字余额的百分比,四舍五入到小数点后 10 位,但它们的总和必须为 1.0000000000(或 100.0000000000%)。我可以得到 0.9999999998 或 1.0000000004,但我似乎无法达到 1.0。还有什么我可以做的吗?
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;
我正在计算这组余额的百分比:
ratio_to_report(balance) over ()
并将其四舍五入到小数点后 10 位:
round(ratio_to_report(balance) over (), 10)
当我运行如下查询时:
select balance, ratio_to_report(balance) over (), round(ratio_to_report(balance) over (), 10) as pctg
from balances;
这个结果看起来不错,但是当我通过以下方式检查 sum(pctg) 时:
select sum(pctg) from
(
select balance,
ratio_to_report(balance) over (),
round(ratio_to_report(balance) over (), 10) pctg
from balances
)
我明白了:
SUM(PCTG)
------------------
1.0000000004
在添加四舍五入到小数点后 10 位的小数百分比时,是否有其他技术或函数始终得到 1.0000000000 的总和?
【问题讨论】:
-
这很简单。如果你想得到精确的 1.0,那么不要总结四舍五入的值。
标签: sql oracle sum rounding window-functions