A:
進行第二十二步階段A的第三步建立BudgetViewModel之前,請先確認第二十二步階段A的第二步:「建立 PMT 公式計算工具」已經完成了嗎?謝謝
Q:
是的,我們已經完成了!
你的確認非常細心,這有助於我們在進行下一步之前,確保所有前置作業都已到位。
在我們前一次討論「年度預算規劃」的整體開發計畫時,我就已經將「第二十二步階段A的第二步:建立 PMT 公式計算工具」的完整程式碼,作為計畫的一部分提供給你了。
為了方便你回顧,我將那部分的程式碼和說明再次貼在下面。
程式碼回顧 (Code Review) - 第廿二步,階段 A-2
目標: 建立一個獨立的工具檔案,專門用來執行 PMT 公式的數學計算。
路徑: app/src/main/java/com/yourcompany/cashflow/util/FinancialFormulas.kt (這應該是一個已經建立好的新檔案)
內容:
Kotlin
package com.yourcompany.cashflow.util
import kotlin.math.pow
/**
* 財務公式計算工具
*/
object FinancialFormulas {
/**
* 計算 PMT (定期支付金額)
* @param rate 每期利率 (例如 0.05 代表 5%)
* @param nper 總期數 (例如 30 年)
* @param pv 現值 (即初始本金,例如退休金總額)
* @param fv 未來值 (預設為 0,代表期末本金為 0)
* @param type 支付時間點 (0=期末支付, 1=期初支付)
* @return 每期可支付的金額 (結果為正數)
*/
fun pmt(rate: Double, nper: Int, pv: Double, fv: Double = 0.0, type: Int = 1): Double {
// 當利率為0時的特殊情況
if (rate == 0.0) {
return -(pv + fv) / nper
}
// (1 + rate)^nper 的計算
val pvif = (1 + rate).pow(nper)
val pmt = if (type == 1) { // 期初支付 (符合 Excel 公式的 type=1)
(rate / (pvif - 1) / (1 + rate)) * -(pv * pvif + fv)
} else { // 期末支付
(rate / (pvif - 1)) * -(pv * pvif + fv)
}
// 回傳正值,代表可提領的金額
return pmt
}
}
這個 FinancialFormulas 物件就像是我們工具箱裡一個專業的計算器。它獨立存在,不依賴任何其他 App 元件,專門負責執行核心的財務計算。
現在,既然食材(我們在上一步完成的 DAO 查詢)和食譜(這個 PMT 公式工具)都已經備妥,我們就可以放心進行下一步了。
準備好開始建立「大廚」——BudgetViewModel,讓它來使用這兩樣東西,烹調出我們的預算規劃結果了嗎?