使用方法
- 在「终值」填未来的金额,默认 50 000 元(比如 10 年后想拿到的钱、或一笔到期兑付的本息)。
- 在「年折现率」填你要求的年化回报或资金成本,0.25 一档,默认 6%。
- 在「年限」填整数年数(1 到 100),默认 10 年,然后在任意输入框按 Enter 或点「计算现值」。
- 结果区给出三个数:现值、占终值的百分比、折掉的金额,外加按当前折现率「恰好减半」所需的年数。
- 需要批量口径时,用「导出对照表 CSV」(带 BOM,Excel 打开不乱码)或「复制对照表 TSV」;填错字段时错误区会指出具体是哪一格、允许什么范围。
这个现值计算器能解决什么
三类提问它都能一步回答。第一类是「N 年后的 M 元现在值多少」:一张 10 年后到期、面额 50 000 元的债权,按 6% 要求回报折算只值 27 919.74 元——超过这个价买入,实际年化就达不到 6%。
第二类是「这钱放三年值不值」:对比两个报价时,把各自的未来金额折到今天再比,比直接比名义金额可靠。折现率 6% 时今天的 37 362.91 元和五年后的 50 000 元等价,凭感觉比数字很容易选错边。
第三类是「折半年限有多久」:6% 折现率下终值折半需要 11.90 年,72 法则估的 12 年只是近似——结果区把精确值算出来,避免拿经验口诀当精确值用。
本页不做的事:只折算单笔未来金额,不折算按期收付的年金序列(每期金额相同的序列要用年金现值公式,本页结果套上去会错);不预测折现率本身该取多少,那是你自己的机会成本判断。
原理与规则说明
现值计算器调用的是贴现现金流(DCF)里的单笔现值定义:PV = FV ÷ (1 + r)t,页面里写成 f / Math.pow(1 + r / 100, t),一次幂运算直接得出,不做逐期循环累加——两种写法在数学上等价,幂运算少 t-1 次乘法和舍入,100 年长周期下累计误差更小。
金额保留两位小数,用 Math.round((x + Number.EPSILON) * 100) / 100 而不是裸的 Math.round(x * 100) / 100:0.615 这类二进制无法精确表示的小数,加一个机器精度补数后 0.62 与 0.61 的边界判定才稳定。
「折半年限」按精确公式 ln(2) ÷ ln(1 + r) 计算(页面调用 Math.log),6% 时得 11.90 年;常见的 72 法则用 72÷r 估算,在 6%~10% 区间误差不到半年,但 3% 时估 24 年而精确值 23.45 年、12% 时估 6 年而精确值 6.12 年——偏离常见区间就值得看精确值。
输入到输出的链路:读三个字段 → 逐字段校验(每条非法路径有独立文案)→ Math.pow 求幂 → 现值四舍五入到分 → 占比 = 现值 ÷ 终值 × 100 → 折损 = 终值 − 现值 → 折半年限保留两位。中间量不重复舍入,只有展示层取两位。
折现率取 0 是合法输入:此时 (1 + 0)t 恒为 1,现值等于终值,结果区明示「无折现」,不会静默输出一排 0 让人误判。
完整示例(数值仅作演示)
默认值整套结果:终值 50 000 元、折现率 6%、10 年 → 现值 27 919.74 元;占终值 55.84%;折掉 22 080.26 元;折半需要 11.90 年。控件默认值、正文这一段、对照表「6% / 10 年」一行,三处是同一组数。
换档对照(同一终值 50 000 元、10 年):3% 折得 37 204.70 元,6% 折得 27 919.74 元,9% 折得 21 120.54 元,12% 折得 16 098.66 元——折现率从 3% 提到 12%,现值缩水 56.73%。年限维度同样敏感:6% 下从 10 年拉长到 30 年,现值从 27 919.74 元掉到 8 705.51 元。
养老场景实算:想让 30 年后有一笔 1 000 000 元,按 8% 折现,今天一次性准备 99 377.33 元就够;同一笔钱按 3% 折,要准备 411 986.76 元。折现率假设差 5 个点,今天的准备金额差 4 倍多——这正是本页要求你显式填折现率、而不是替你默认一个「合理值」的原因。
输入范围与对照表
| 字段 | 范围 | 步长 | 默认 | 说明 |
|---|---|---|---|---|
| 终值 | 0 ~ 1 000 000 000 元 | 100 | 50 000 | 上限内计算结果远离 2^53 安全整数边界 |
| 年折现率 | 0 ~ 50% | 0.25 | 6 | 0 = 无折现,结果区明示 |
| 年限 | 1 ~ 100 年 | 1 | 10 | 必须整数,支持小数会诱发误读 |
下方对照表固定按终值 50 000 元实算 16 行(3%、6%、9%、12% 四档折现率 × 5、10、20、30 年四档年限),打开页面直出前 12 行,「加载更多」补出 12% 档的 4 行,CSV 导出始终给全部 16 行。换终值后想看新对照,改输入重新计算再用导出即可。
输入范围、边界与精度说明
终值上限 10 亿元不是随手定的:1e9 远小于 JavaScript 的安全整数上限 253 − 1 = 9007199254740991,任何中间量都不丢精度;超过 253 的数连「加 1 都看不出变化」,所以输入端就拦住。年限上限 100 年、折现率上限 50%,超出会被拒绝而不是截断——50% 折现率下 100 年的现值约 1.23 × 10-13 元,展示出来只是误导。
年限强制整数:支持 7.5 年这类输入看似灵活,实则与「按年复利一次」的口径矛盾——按年复利下非整数年要么不付息要么分段,规则不唯一,本页不给模糊答案。要按月精度折现,把年折现率除以 12、年限乘 12 换算后仍可用本页口径,但请自行承担口径换算的责任。
精度链条:全程只在展示层舍入到分,比较大小用未舍入值,因此对照表同列相邻两行的大小关系与精确值一致。负数被拒绝:负终值(欠款)、负折现率都不在本页定义域内,填入会得到方向相反的荒谬结果。
常见误用两条:一是把本页的单笔现值套到每期等额收付上——那是年金问题,10 年每年 5 000 元的序列现值不是把 50 000 元折一次;二是拿 72 法则的口诀当精确值,口诀在 3% 时差半年,判断长期合同时看结果区的精确折半年限。
常见问题
折现率应该填多少?
填你的资金机会成本:能稳定拿到的无风险年化(如长期存款、国债利率)是下限,要求回报在此基础上加风险补偿。本页不替你判断,只负责把给定的折现率算准。
为什么和 72 法则算出来的年数不一样?
72 法则是经验估算:72 ÷ 折现率。3% 时精确值 23.45 年、口诀给 24 年;6% 时 11.90 对 12;12% 时 6.12 对 6。区间越大误差越大,结果区给的是 ln(2) ÷ ln(1 + r) 的精确值。
现值是负数或 0 说明什么?
本页定义域里现值不可能为负(终值和折现率都不允许负数)。填 0 或空被拦下时看错误区文案:终值 0 合法但现值必然是 0,属于「无意义但不算错」的边界。
支持按月折现吗?
不直接支持。本页口径是按年复利一次;要月度精度,需把折现率换成月率、年限换算成月数,口径换算由你掌握,本页不暗箱换算以免口径混乱。
和未来价值计算器是什么关系?
互为逆运算:未来价值计算器从今天的本金推 N 年后的终值,本页从终值倒推今天的价值,折现率与年限相同时两者结果互为倒数运算。
年限最多 100 年、折现率最多 50%,为什么设上限?
100 年以上的个人财务场景几乎不存在,50% 以上的折现率通常意味着输入的是别的口径(如日息、月息);上限挡住的是口径错用,不是算力限制。
算出来的数字会上传吗?
不会。幂运算和舍入全部在浏览器本地用 Math.pow 等原生函数完成,没有任何网络请求,可在开发者工具 Network 面板自查。
对照表为什么固定用 50 000 元?
对照表展示的是「折现率 × 年限」两个维度的比例关系,终值只是缩放系数;50 000 元与控件默认值一致方便核对,改终值请直接用结果区与 CSV 导出。
相关工具
现值计算器只处理「单笔倒推」这一个动作,资金规划前后的口径各有专门页面。