在期數 N、年利率 I/Y、現值 PV、每期付款 PMT、終值 FV 這 5 個欄位中,只把想求的那一欄留空,其餘 4 欄輸入數值,就會反推留空的那一欄。
這個頁面可以做什麼
- 在期數 \(N\)、年利率 \(I/Y\)、現值 \(PV\)、每期付款 \(PMT\)、終值 \(FV\) 這 5 個之中填入 4 個,就能反推剩下的 1 個(和 BA II Plus、HP 12C 等財務計算機的「5 鍵 TVM」設計相同)
- 正負號的規則也和財務計算機相同:從自己身上流出去的錢(存入、定期存、還款)輸入負數,流進來的錢(借入、領取)輸入正數。例:每年存 2,000 元就是 PMT = -2000
- 可以設定付款時間點(期末=一般的貸款和存款/期初),以及 P/Y(每年付款次數)、C/Y(每年複利次數)
- 除了求出的值,也會顯示每期付款的合計和利息合計。期數是 20 以內的整數時,還會列出逐期的「利息與餘額」明細表
- 附餘額變化圖表。公式的淺顯解說,以及可直接複製的 Excel(FV、PV、PMT、RATE、NPER 函數)、Google 試算表、Python 公式,也都整理在這個頁面
這個計算有什麼用?
財務管理、理財規劃課程裡常要查表或背誦的利率因子——複利終值因子(FVIF)、複利現值因子(PVIF)、年金終值因子(FVIFA)、年金現值因子(PVIFA),其實全都是這條 TVM 方程式的變形。例如複利終值因子就是 \((1+i)^N\) 本身,年金終值因子是 \(\dfrac{(1+i)^N-1}{i}\)。
在這個頁面一邊改數值一邊確認,就能把它們理解成「同一條公式的不同讀法」,而不是零散地死背,遇到應用題也更有把握。
「房貸 1,000 萬元、年利率 2.2%(假設固定)、30 年本息平均攤還」,就是設 PV = +10,000,000、N = 360(30 年 × 12 次)、每月付(P/Y = C/Y = 12)、FV = 0 來求 PMT 的計算。答案是每月約 37,970 元,總還款約 1,367 萬元,利息合計約 367 萬元。
看懂金額背後的公式,就能自己確認「貸款金額、利率、期間各自影響多大」。實際的房貸有手續費、設定費和利率變動,正確的還款額請以金融機構的試算為準。
「想要 20 年間每年領 120 萬元,如果能以年利率 2% 運用,一開始需要多少錢?」就是設 PMT = +1,200,000、N = 20、FV = 0 來求 PV 的計算,答案約 1,962 萬元(PV = −19,621,720 元 = 一開始要付出的錢)。
領取總額是 2,400 萬元,所以差額約 438 萬元由運用收益支應。能用數字確認「利率改變時,需要的金額會變多少」,是思考退休金時很重要的判斷依據(實際運用時利率不會固定,也有虧損本金的可能)。
「每月存 1 萬元、年利率 3%(按月複利),什麼時候能存到 100 萬元?」就是設 PMT = -10,000、FV = +1,000,000、P/Y = C/Y = 12 來求 N 的計算,答案約 89.4 個月(約 7.4 年)。
利率 0% 時要 100 個月,多虧了利息,提早約 10 個月達成——連「利息的作用」都能用數字看見,就是反推 N 有趣的地方。
「300 萬元的設備租賃 5 年(相當於實際年利率 4%、每月付)」,設 PV = +3,000,000、N = 60、P/Y = C/Y = 12、FV = 0 來求 PMT,每月約 55,250 元,付款總額約 331.5 萬元,差額約 31.5 萬元相當於利息和手續費。
反過來,如果只告訴您「每月金額和總額」,反推 I/Y 就能看穿實際的年利率。比較分期付款、汽車貸款、手機分期時都很有用。
公式與圖表
符號與用語解說
符號
| \(PV\) | 現值(Present Value)。現在這個時間點進出的錢。借入或領取為正數,存入或投資為負數。 |
| \(FV\) | 終值(Future Value,也稱未來值)。期間最後的時間點進出的錢。到期領取為正數,最後要付款為負數。 |
| \(PMT\) | 每期付款(Payment)。每期重複進出的錢。存款、還款這種從自己身上流出去的錢為負數,房租收入這種流進來的錢為正數。 |
| \(N\) | 期數(付款次數)。計息的期數。每年付一次時和年數相同,每月付(P/Y = 12)時則以月數計算(10 年就是 \(N = 120\))。 |
| \(I/Y\) | 年利率(Interest per Year)。以 % 表示的每年利率,直接沿用財務計算機按鍵的名稱。 |
| \(P/Y\) | 每年付款次數(Payments per Year)。每期付款 \(PMT\) 一年有幾次。每年付一次設為 1,每月付設為 12。 |
| \(C/Y\) | 每年複利次數(Compounding per Year)。利息併入本金的次數。通常設成和 \(P/Y\) 相同,不同時會把複利的週期換算成付款的週期來計算。 |
| \(i\) | 以小數表示的每期利率。每年付一次時就是年利率本身(6% 就是 \(i = 0.06\)),每月付時是換算成每月的利率。 |
| \(g\) | 表示付款時間點的開關。期初付款時 \(g = 1\)、期末付款時 \(g = 0\),期初付款時 \(PMT\) 那一項要多乘一次 \((1+i)\)。 |
| \(\ln\) | 自然對數。取出「要乘幾次才會變成這個倍數」的工具,用在反推期數 \(N\)。 |
用語
| 貨幣時間價值 (TVM) |
「現在的 1 萬元,比將來的 1 萬元更有價值」的概念(Time Value of Money)。因為現在的錢可以加上利息增加。這是財務管理(財務金融)最基本的基礎,這個頁面的方程式就是把這個概念寫成一條公式。 |
| 現值 | 把將來的錢換算成「相當於現在的多少錢」所表示的金額。例如年利率 2% 時,1 年後的 102 萬元和現在的 100 萬元價值相同。 |
| 終值 | 現在的錢或每期存入的錢,連同利息將來會變成多少的金額(也稱未來值)。 |
| 折現 | 把將來的錢換算成現值的計算。因為要把將來的金額除以 \((1+i)^N\),所以稱為「折現」,剛好是加上利息的計算(複利)的反方向。 |
| 年金終值因子 | 每期存 1 元時,連同利息將來會累積到多少的倍數 \(\dfrac{(1+i)^N - 1}{i}\)(英文縮寫 FVIFA,也稱年金終值利率因子)。是財務管理、理財規劃課程中的基本係數之一,乘上每期付款使用。 |
| 年金現值因子 | 每期領 1 元的權利,換算成現在的錢是多少的倍數 \(\dfrac{1-(1+i)^{-N}}{i}\)(英文縮寫 PVIFA)。用在年金和房貸(貸款金額和每期還款額的關係)的計算,是年金終值因子的現值版本。 |
| 現金流量 | 錢的進出流向。TVM 只注意錢在「什麼時候、多少、往哪個方向」移動,並用正負號表示方向。 |
| 正負號規則 | 從自己身上流出去的錢(存入、定期存、還款)為負數,流進來的錢(借入、領取)為正數的規則。是財務計算機和 Excel 財務函數共通的規則,有了這個規則,不同種類的計算(貸款、存款、年金)都能用一條公式處理。 |
| 期末付款 | 每期付款(PMT)在每期結束時進行的方式,也稱普通年金。一般的貸款還款和定期存款是這一種,這個頁面的預設也是期末付款。 |
| 期初付款 | 每期付款(PMT)在每期一開始進行的方式,也稱期初年金。即使付款金額相同,利息也提早一期開始計算,所以 \(PMT\) 那一項要多乘一次 \((1+i)\)。像預付房租這種「先付」就是這種形式。 |
| 財務計算機 | 有 TVM 計算專用按鍵(N、I/Y、PV、PMT、FV)的計算機(也稱金融計算機)。BA II Plus(德州儀器)和 HP 12C 最有名,用在 CFP、CFA 等考試和實務。這個頁面是同樣 5 鍵方式的網頁版。 |
| 數值解法 (二分法) |
無法用移項取出答案時,「把答案所在的區間每次縮小一半」來求近似值的方法。反推年利率 I/Y 等於解 N 次方程式,沒有公式可用,所以這個頁面也用二分法計算。 |
建議先了解的基礎知識
為了能「理解意義」地使用這個頁面的計算,這裡整理了建議先了解的基礎知識。
| 正負數(國中七年級,12~13 歲) |
|
| 比率與百分率(國小高年級,10~12 歲) |
|
| 指數(國中七年級,12~13 歲) |
|
| 複利的基礎(本網站的「複利計算機」頁面,國中以上) |
|
| 對數(高中,15~18 歲,進階) |
|
用 Excel 計算的方法
| 每期利率(6% 就是 0.06) | 0.06 |
| 期數 N | 10 |
| 每期付款 PMT | -2000 |
| 現值 PV | 20000 |
| 終值 FV | =FV(B1,B2,B3,B4,0) |
| 每期利率(6% 就是 0.06) | 0.06 |
| 期數 N | 10 |
| 現值 PV | 20000 |
| 終值 FV | 0 |
| 每期付款 PMT | =PMT(B1,B2,B3,B4,0) |
| 期數 N | 5 |
| 每期付款 PMT | 0 |
| 現值 PV | -1000 |
| 終值 FV | 1500 |
| 每期利率 | =RATE(B1,B2,B3,B4) |
| 每期利率(8% 就是 0.08) | 0.08 |
| 每期付款 PMT | 0 |
| 現值 PV | -1000 |
| 終值 FV | 2000 |
| 期數 N | =NPER(B1,B2,B3,B4) |
| 每期利率(5% 就是 0.05) | 0.05 |
| 期數 N | 20 |
| 每期付款 PMT | -100 |
| 終值 FV | 0 |
| 現值 PV | =PV(B1,B2,B3,B4,1) |
第 1 個表格的 B5 會顯示 -9,455.36,第 2 個是 -2,717.36,第 3 個約 0.0845(= 年利率 8.447%。把儲存格格式設成百分比比較好讀),第 4 個約 9.006,第 5 個是 1,308.53。
FV、PMT、PV 函數的最後一個引數是付款時間點,0 或省略 = 期末付款,1 = 期初付款。每月付款的計算,利率要用每月的利率(年利率 ÷ 12),N 要用月數。
用 Google 試算表計算的方法
| 每期利率(6% 就是 0.06) | 0.06 |
| 期數 N | 10 |
| 每期付款 PMT | -2000 |
| 現值 PV | 20000 |
| 終值 FV | =FV(B1,B2,B3,B4,0) |
| 每期利率(6% 就是 0.06) | 0.06 |
| 期數 N | 10 |
| 現值 PV | 20000 |
| 終值 FV | 0 |
| 每期付款 PMT | =PMT(B1,B2,B3,B4,0) |
| 期數 N | 5 |
| 每期付款 PMT | 0 |
| 現值 PV | -1000 |
| 終值 FV | 1500 |
| 每期利率 | =RATE(B1,B2,B3,B4) |
| 每期利率(8% 就是 0.08) | 0.08 |
| 每期付款 PMT | 0 |
| 現值 PV | -1000 |
| 終值 FV | 2000 |
| 期數 N | =NPER(B1,B2,B3,B4) |
| 每期利率(5% 就是 0.05) | 0.05 |
| 期數 N | 20 |
| 每期付款 PMT | -100 |
| 終值 FV | 0 |
| 現值 PV | =PV(B1,B2,B3,B4,1) |
用 Python 計算的方法
import math
# 把想求的欄位設為 None(下面的例子是求 fv)
n = 10 # 期數 N(付款次數)
annual_rate = 6 # 年利率 I/Y(%)
pv = 20000 # 現值 PV(流入的錢 = 正數,流出的錢 = 負數)
pmt = -2000 # 每期付款 PMT
fv = None # 終值 FV
is_beginning = False # True=期初付款、False=期末付款
g = 1 if is_beginning else 0
# 每期利率(每年付一次的情況。每月付時除以 12,n 改用月數)。求年利率時保持 None
i = annual_rate / 100 if annual_rate is not None else None
def tvm_left_side(i_, n_, pv_, pmt_, fv_):
"""TVM 方程式的左邊(等於 0 的組合就是答案)"""
if abs(i_) < 1e-12:
return pv_ + pmt_ * n_ + fv_
growth = (1 + i_) ** n_
return pv_ * growth + pmt_ * (1 + i_ * g) * (growth - 1) / i_ + fv_
if fv is None:
fv = -(pv + pmt * n) if abs(i) < 1e-12 else -(pv * (1 + i) ** n + pmt * (1 + i * g) * ((1 + i) ** n - 1) / i)
print(f"終值 FV = {fv:,.2f}")
elif pv is None:
pv = -(fv + pmt * n) if abs(i) < 1e-12 else -(fv + pmt * (1 + i * g) * ((1 + i) ** n - 1) / i) / (1 + i) ** n
print(f"現值 PV = {pv:,.2f}")
elif pmt is None:
pmt = -(pv + fv) / n if abs(i) < 1e-12 else -(pv * (1 + i) ** n + fv) / ((1 + i * g) * ((1 + i) ** n - 1) / i)
print(f"每期付款 PMT = {pmt:,.2f}")
elif n is None:
if abs(i) < 1e-12:
n = -(pv + fv) / pmt
else:
k = pmt * (1 + i * g) / i
n = math.log((k - fv) / (pv + k)) / math.log(1 + i)
print(f"期數 N = {n:.3f}")
else:
# 年利率無法用移項解出,所以用二分法尋找(也有沒有解的輸入)
low, high = -0.9999, 10.0
if tvm_left_side(low, n, pv, pmt, fv) * tvm_left_side(high, n, pv, pmt, fv) > 0:
raise SystemExit("在這個範圍找不到解。請確認錢的方向(正負號)")
for _ in range(200):
mid = (low + high) / 2
if tvm_left_side(low, n, pv, pmt, fv) * tvm_left_side(mid, n, pv, pmt, fv) <= 0:
high = mid
else:
low = mid
i = (low + high) / 2
print(f"年利率 I/Y = {i * 100:.3f}%")
total_interest = abs(pv + pmt * n + fv)
print(f"利息合計 = {total_interest:,.2f}")
用 LaTeX 等數學式語言的寫法(可直接複製)
PV(1 + i)ᴺ + PMT × ((1 + i)ᴺ − 1)/i + FV = 0
PV(1+i)^{N} + PMT \cdot \dfrac{(1+i)^{N}-1}{i} + FV = 0
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>PV</mi>
<msup>
<mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>i</mi><mo>)</mo></mrow>
<mi>N</mi>
</msup>
<mo>+</mo>
<mi>PMT</mi>
<mo>⋅</mo>
<mfrac>
<mrow>
<msup>
<mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>i</mi><mo>)</mo></mrow>
<mi>N</mi>
</msup>
<mo>−</mo>
<mn>1</mn>
</mrow>
<mi>i</mi>
</mfrac>
<mo>+</mo>
<mi>FV</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
PV(1+i)^N + PMT((1+i)^N-1)/i + FV = 0
pv (1 + i)^n + pmt ((1 + i)^n - 1)/i + fv == 0
pv*(1 + i)^n + pmt*((1 + i)^n - 1)/i + fv = 0;
pv*(1 + i)^n + pmt*((1 + i)^n - 1)/i + fv == 0
PV(1+i)^N + PMT((1+i)^N-1)/i + FV = 0
FV = −(PV(1 + i)ᴺ + PMT × ((1 + i)ᴺ − 1)/i)
FV = -\left( PV(1+i)^{N} + PMT \cdot \dfrac{(1+i)^{N}-1}{i} \right)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>FV</mi>
<mo>=</mo>
<mo>−</mo>
<mrow>
<mo>(</mo>
<mi>PV</mi>
<msup>
<mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>i</mi><mo>)</mo></mrow>
<mi>N</mi>
</msup>
<mo>+</mo>
<mi>PMT</mi>
<mo>⋅</mo>
<mfrac>
<mrow>
<msup>
<mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>i</mi><mo>)</mo></mrow>
<mi>N</mi>
</msup>
<mo>−</mo>
<mn>1</mn>
</mrow>
<mi>i</mi>
</mfrac>
<mo>)</mo>
</mrow>
</mrow>
</math>
FV = -(PV(1+i)^N + PMT((1+i)^N-1)/i)
fv = -(pv (1 + i)^n + pmt ((1 + i)^n - 1)/i)
fv := -(pv*(1 + i)^n + pmt*((1 + i)^n - 1)/i);
fv = -(pv*(1 + i)^n + pmt*((1 + i)^n - 1)/i);
FV = -(PV(1+i)^N + PMT((1+i)^N-1)/i)
N = ln(−FV/PV) / ln(1 + i)
N = \dfrac{\ln\left(-\dfrac{FV}{PV}\right)}{\ln(1+i)}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mi>ln</mi>
<mrow>
<mo>(</mo>
<mo>−</mo>
<mfrac><mi>FV</mi><mi>PV</mi></mfrac>
<mo>)</mo>
</mrow>
</mrow>
<mrow>
<mi>ln</mi>
<mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>i</mi><mo>)</mo></mrow>
</mrow>
</mfrac>
</mrow>
</math>
N = ln(-FV/PV) / ln(1+i)
n = Log[-fv/pv]/Log[1 + i]
n := ln(-fv/pv)/ln(1 + i);
n = log(-fv/pv)/log(1 + i);
N = ln(-FV/PV)/ln(1+i)
PV + PMT × N + FV = 0
PV + PMT \cdot N + FV = 0
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>PV</mi>
<mo>+</mo>
<mi>PMT</mi>
<mo>⋅</mo>
<mi>N</mi>
<mo>+</mo>
<mi>FV</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
PV + PMT * N + FV = 0
pv + pmt n + fv == 0
pv + pmt*n + fv = 0;
pv + pmt*n + fv == 0
PV + PMT N + FV = 0
請 ChatGPT 幫忙計算的方法
你是財務計算(貨幣時間價值 TVM)助理。請務必實際執行 Python 程式碼來進行下面的計算,並且只根據執行結果的數值回答(不要用心算或推測回答)。 使用標準 TVM 方程式 PV(1+i)^N + PMT(1+i*g)*((1+i)^N - 1)/i + FV = 0(g=1 是期初付款,g=0 是期末付款)。 正負號的規則和財務計算機相同,從自己身上流出去的錢為負數,流進來的錢為正數。 以年利率 6% 借 20,000 元(新臺幣,PV = +20000),10 年間每年年底(期末)還固定金額,最後還清(FV = 0)。 請分別求出下面的值。 1. 每年的還款金額 PMT 2. 還款金額合計(PMT × 10) 3. 利息合計(|PV + PMT×N + FV|) 請列出計算用的公式和執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權