使用方法
- 口径一,按年数。在「期初值 PV」填 10000、「期末值 FV」填 25000、「年数 n」填 5,这就是页面打开时的默认组合。年复合增长率计算器把这三个数换算成一个年化百分比,结果是 20.11%。
- 口径二,按日期区间。把「计算口径」切到「按日期区间」,起始日期填 2020-01-01、结束日期填 2025-01-01。这时年数不再由你填写,而是用两个日期之间的实际天数除以 365.25 折算出来:1827 天 ÷ 365.25 = 5.002053 年,对应的 CAGR 是 20.10%。不满整年、跨闰年、间隔不是 12 的倍数的情形都用这个口径。
- 点「计算年复合增长率」,或在任意输入框里按 Enter。结果区给出 CAGR、总涨幅、总倍数和实际参与运算的年数,另外附一行「总涨幅 ÷ 年数」的算术口径作对照。
- 下方「逐年复利明细」把算出的 CAGR 当作固定年增速,从期初值往后推 30 年。默认只渲染 12 行,点「加载更多」每次追加 12 行;点「导出 CSV」下载带 BOM 的表格文件,点「复制对照表」把整张表以制表符分隔的文本送进剪贴板,可以直接粘到 Excel 里分列。
- 点「载入示例」随时回到 10000 → 25000 / 5 年的默认组合。
这个年复合增长率计算器能解决什么问题
一是把「一共涨了多少」翻译成「每年平均涨了多少」。基金年报和产品宣传里常见「三年翻了 2.5 倍」这种说法,但它无法横比:三年 2.5 倍和五年 2.5 倍完全是两回事,换算成年化后才有统一标尺,20.11% 与 9.60% 一眼能比出高低。
二是识破算术平均造成的错觉。一个项目第一年涨 50%、第二年跌 50%,加法平均是 0%,听起来「没赚没亏」,实际 10000 元只剩 7500 元;真值是几何平均 (1.5 × 0.5)(1 ÷ 2) − 1 = −13.40%。凡把各年涨幅相加再除以年数的算法都是错的。
三是处理不规则的时间间隔。实际业务里的期初和期末很少刚好隔满一年:股权退出日、基金成立日、项目验收日都可能落在年中间。本页用实际天数除以 365.25 得到年数,再开相应次方根,避免「按整年硬凑」带来的偏差。
四是反推目标可达性。想知道「五年把 1 万做到 10 万要多高的年化」,把 FV 改成 100000,得到 58.49%,拿去对照自己的投资假设比拍脑袋靠谱。
本页不做这些事:不处理定投、分批买入这类多次现金流(那种情形要用内部收益率 IRR,不能用 CAGR);不把通胀和汇率折算进去,所以算出来的是名义增速;也不判断这条增长曲线是否可持续。想看清不同复利频率下的终值金额,用页面底部的「未来价值主张计算器」;想把名义增速换成购买力口径,用「通货膨胀计算器」。
计算原理:几何平均、n 次方根与 ACT/365.25
公式只有一行:CAGR = (FV ÷ PV)(1 ÷ n) − 1。代码里对应 Math.pow(fv / pv, 1 / years) - 1。这个式子就是几何平均的标准化写法:把 n 个增长期的总倍数开 n 次方根,再减 1,得到「如果每年都按同一个比率增长,这个比率是多少」。
为什么指数是 1 ÷ n,而不是 1 ÷ (n − 1)。因为 n 表示期初到期末之间经历了几个增长期。从 2020 年初到 2025 年初正好走完 5 个完整年度,中间有 5 次增长,所以开 5 次方根。写成 1 ÷ (n − 1) 是常见笔误,它算的其实是「增长率的标准差自由度」那一套,与 CAGR 无关。
为什么必须用几何平均。资产价值按乘法链式变化:第二年的起点是第一年的终点,所以倍数要相乘(1.5 × 0.5 = 0.75)而不是相加,要还原每年的代表倍数就得开方。算术平均只对加法结构成立,用在乘法结构上会系统性高估收益,波动越大高估越严重。
日期口径为什么要除以 365.25。回归年的平均长度是 365.2422 天,取 365.25 是金融业沿用多年的近似值,通常写作 ACT/365.25。不用 365 的理由:跨闰年时用 365 会把同一段时间在不同起止年份算成不同的年数,365.25 能让「四年一闰」的周期自洽。默认示例里 1827 天按 365.25 算是 5.002053 年、CAGR 20.10%,按「整 5 年」算则是 20.11%,差 0.01 个百分点。
从输入到输出的完整链条。两个日期经 Date.parse 解析成 UTC 毫秒 → 相减除以 86400000 得整天数 → 除以 365.25 得年数 → Math.pow(fv / pv, 1 / years) 得总倍数 → 减 1 得 CAGR → 乘 100 保留两位小数。翻倍年数用 Math.log(2) / Math.log(1 + CAGR),即把 (1+r)t = 2 两边取自然对数解出的 t,与「72 法则」同源但不需要口诀。
多期不规则间隔怎么处理。如果有若干个不同日期的取值点,正确的做法是分两步:先对每一段单独算期间年化 (V_i ÷ V_(i-1))^(1 ÷ ΔT_i) − 1,再把各段的倍数连乘后开总年数方根,等价于直接用首尾两个点算一次性 CAGR。两者必然相等,因为指数运算的乘法可以合并。举例:12000(2019-04-01)→ 15000(2021-10-01,914 天 = 2.502396 年,期间年化 9.3269%)→ 21000(2023-07-01,638 天 = 1.746749 年,期间年化 21.2431%)→ 25000(2025-01-01,550 天 = 1.505818 年,期间年化 12.2756%),总跨度 2102 天 = 5.754962 年,一次性 CAGR 与三段几何平均都等于 13.60%。这条性质正是几何平均口径自洽的证据。
本页的年复合增长率计算器只依赖 Math.pow、Math.log 和日期差值,没有任何迭代求解,所以它对同样输入永远给出同样结果,不存在收敛误差。
完整示例(数值仅作演示)
下面三组都来自默认值与真实计算,逐条给出中间量,方便你手工复算核对:
示例一,年数口径。PV = 10000,FV = 25000,n = 5。
- 总倍数 = 25000 ÷ 10000 = 2.5;
- 开 5 次方根:2.50.2 = 1.20112443…;
- CAGR = 1.20112443 − 1 = 0.20112443…,即 20.11%;
- 回代验证:10000 × 1.201124435 = 25000.00,与期末值完全吻合;
- 对照口径:总涨幅 150% ÷ 5 年 = 30.00%,比 CAGR 高 9.89 个百分点,这就是算术平均的高估幅度。
示例二,日期口径。起始 2020-01-01,结束 2025-01-01,PV 与 FV 同上。
- 两个 UTC 时间戳相减 = 1827 天(2020 与 2024 是闰年,各多一天);
- 年数 = 1827 ÷ 365.25 = 5.002053 年;
- CAGR = 2.5(1 ÷ 5.002053) − 1 = 20.10%;
- 与示例一相差 −0.0090 个百分点,来源就是那多出来的 0.002053 年。
示例三,多期不规则间隔。四个取值点 12000 → 15000 → 21000 → 25000,日期依次是 2019-04-01、2021-10-01、2023-07-01、2025-01-01,各段跨度 914、638、550 天。三段期间年化分别是 9.3269%、21.2431%、12.2756%,总跨度 5.754962 年,一次性 CAGR 与几何平均都等于 13.60%。三段差异很大(从 9.33% 到 21.24%),合并后的 13.60% 才是可对外引用的口径。
年数、倍数与所需 CAGR 对照表
第一张表固定「10000 变成 25000」(2.5 倍),看年数拉长后 CAGR 怎么衰减。同一条增长曲线换个时间尺度看,数字会差很多,这也是必须写明时间口径的原因:
| 年数 n | 所需年复合增长率 | 总涨幅 | 按此 CAGR 翻倍需 |
|---|---|---|---|
| 1 年 | 150.00% | 150% | 0.76 年 |
| 2 年 | 58.11% | 150% | 1.51 年 |
| 3 年 | 35.72% | 150% | 2.27 年 |
| 4 年 | 25.74% | 150% | 3.03 年 |
| 5 年(默认) | 20.11% | 150% | 3.78 年 |
| 10 年 | 9.60% | 150% | 7.56 年 |
| 15 年 | 6.30% | 150% | 11.35 年 |
| 20 年 | 4.69% | 150% | 15.13 年 |
| 30 年 | 3.10% | 150% | 22.69 年 |
第二张表反过来用:给定目标倍数(2 倍、3 倍),看不同期限需要多高的 CAGR。做目标规划时这张表比第一张更常用:
| 期限 | 翻倍(2 倍)所需 CAGR | 翻三倍(3 倍)所需 CAGR |
|---|---|---|
| 1 年 | 100.00% | 200.00% |
| 2 年 | 41.42% | 73.21% |
| 3 年 | 25.99% | 44.22% |
| 5 年 | 14.87% | 24.57% |
| 10 年 | 7.18% | 11.61% |
| 15 年 | 4.73% | 7.60% |
| 20 年 | 3.53% | 5.65% |
| 30 年 | 2.34% | 3.73% |
第三张表把「翻倍年数」的精确值和口口相传的「72 法则」放在一起,可以看出法则只在 8% 附近最准(7% 时精确 10.24 年、法则 10.29 年,差 0.04 年),利率越高偏差越大(20% 时精确 3.80 年、法则 3.60 年,差 −0.20 年):
| CAGR | 精确翻倍年数 ln2 ÷ ln(1+r) | 72 法则估算 | 差值 |
|---|---|---|---|
| 5% | 14.21 年 | 14.40 年 | +0.19 年 |
| 7% | 10.24 年 | 10.29 年 | +0.04 年 |
| 10% | 7.27 年 | 7.20 年 | −0.07 年 |
| 15% | 4.96 年 | 4.80 年 | −0.16 年 |
| 20% | 3.80 年 | 3.60 年 | −0.20 年 |
输入范围、边界与精度说明
- 期初值 PV 必须大于 0。PV 出现在分母位置,为 0 时
25000 ÷ 0得到Infinity,开方后仍是无限大,页面会直接报错而不是给一个假的数字。把 0 当作「从零起步」也说不通——从 0 到任何数都不是增长率,而是无从定义。 - 期末值 FV 允许为 0,但不允许为负。FV = 0 表示全部亏光,此时
Math.pow(0, 1/5) = 0,CAGR = −100%,这是一个有意义的答案。负数则不同:Math.pow(-0.5, 1/5)在实数范围内没有主值,JavaScript 会返回NaN,页面会拦住它并提示你改填正数。 - 年数 n 的范围是 0.01~200 年。下限 0.01 年约等于 3.7 天,再短的话 1 ÷ n 会非常大,任何微小的倍数变化都会被放大成百分之几万,读数没有意义。上限 200 年是防止有人把「月」当「年」填进去——填 60 想表达 60 个月的话,正确写法是 5。
- 能精确表示的整数上限是 253 = 9007199254740992。这是 IEEE 754 双精度浮点数表示整数的边界,超过之后末位开始丢精度。风险主要来自
Math.pow:(1 + CAGR) 的年数次方超过Number.MAX_VALUE≈ 1.7976931348623157 × 10308 时会变成Infinity,明细表会自动停止生成并在提示里说明。 - 结果显示保留两位小数,但内部计算不取整。页面上 20.11% 是四舍五入后的展示值,参与后续复利和开方的一直是
0.20112443398143132这个全精度值。所以「用页面显示的 20.11% 手工复算明细表最后一列」会出现几分钱的差异,这属于正常现象,不是算错。 - 日期按 UTC 零点解析,不看时区。两个日期相减得到的是整天数,1827 天就是 1827 天,结果与浏览器时区、夏令时切换无关;代价是「2020-01-01 上午 9 点」和「2020-01-01 零点」在本页里被当成同一时刻。
- 本页只算「两点之间」的年化。年复合增长率计算器不处理中间有资金进出的情形。一旦有多次现金流,正确指标是 IRR 或 XIRR,用 CAGR 会把投入时点的差异抹掉,得出偏高的结论。
常见问题
为什么不能把每年的涨幅加起来除以年数?
因为资产价值走的是乘法链。10000 元先涨 50% 变成 15000,再跌 50% 变成 7500,算术平均是 0%,但账户实实在在少了 2500 元;几何平均 (1.5 × 0.5)0.5 − 1 = −13.40% 才是真实年化。跨度越长,两种算法的差距越大。
为什么按日期算比按整年算出来的 CAGR 略低一点?
因为 2020-01-01 到 2025-01-01 实际是 1827 天,除以 365.25 得到 5.002053 年,比整 5 年多了 0.002053 年。分母变大,开方后的年化比率就略小,CAGR 从 20.11% 降到 20.10%。差异很小,但在十年以上的长期口径、或者金额较大时会累积出可观的差别,所以涉及具体日期时建议用日期口径。
期末值填 0 会怎样?
会得到 −100%,这是合法结果,表示本金全部亏光。填负数则会被拒绝,因为负数的 (1 ÷ n) 次方在实数范围内没有定义。想表达「亏了 50%」,应该填原来的一半,而不是负数。
多期数据是不是要先算出各段年化再平均?
先算各段年化是对的,但千万不能取算术平均。正确做法是把各段倍数相乘(各段 (1 + r_i) 连乘),再对总年数开方根。各段时间长度不一样时还必须按时间加权,否则短区间会获得和长区间一样的权重,结果偏高。
翻了 2.5 倍到底是涨了 150% 还是 250%?
都是从 10000 变成 25000 的说法,区别在基数。涨幅 =(25000 − 10000) ÷ 10000 = 150%;倍数 = 25000 ÷ 10000 = 2.5,是「2.5 倍」。中文里「翻了 2.5 倍」有歧义,严谨写法是「涨到 2.5 倍」或「上涨 150%」,本页两个数都给出就是为了避免混淆。
三年 2.5 倍和五年 2.5 倍差多少年化?
三年需要 35.72%,五年只要 20.11%,差约 15.6 个百分点。总倍数一样时,时间越短意味着每年要涨得越猛,而长期能维持的高增速有上限。看到「X 年涨了 Y 倍」的宣传,先换算成年化再横向比较。
CAGR 可以为负吗?负的 CAGR 说明什么?
可以,而且很常见。当 FV 小于 PV 时比值小于 1,开方后仍小于 1,减 1 就是负数。−13.40% 表示这份资产平均每年缩水 13.40%。负 CAGR 到 −100% 是下限,对应本金归零;数值上不会比 −100% 更低,因为比值不可能小于 0。
CAGR 能用来比较波动完全不同的两个项目吗?
只能比「同等期限内的平均增速」,不能比风险。A 每年稳定涨 10%,两年后是 1.21 倍;B 第一年翻倍、第二年跌 39.5%,两年后也是 1.21 倍,两者 CAGR 同为 10%。但 B 的账户曾冲到 2 倍再回落,中途急用钱就会被迫在低点卖出。要看风险得另看回撤幅度、波动率和最大亏损,CAGR 里没有这些信息。
相关工具
- 未来价值主张计算器:按复利终值公式往前推金额,与本页方向相反——那边给你终值,这边反推年化率。
- 复利计算器:关心金额层面怎么滚雪球,输入本金与利率看每年长到多少,不做年化率的反推。
- 投资回报率计算器:算的是总回报率(含成本与收益的比值),不折算到每年,适合看一笔投资的绝对回报。
- 通货膨胀计算器:把本页算出的名义增速扣掉物价涨幅,换算成购买力口径的实际收益。
- 股息收益率计算器:只看分红与股价的比率,是单年的静态指标,和跨年的 CAGR 不是一回事。
- 利润率计算器:算企业经营的利润占比,同样是一个比率类指标,做法是除法而非开方。
- 年金计算器:处理等额多次收付的现金流,正好是本页明确不覆盖的那类场景。
- 百分比变化计算器:只算两个数之间的单期变化率,不做跨年开方,适合看环比、同比。
- 计算器:查看全部计算器工具。