每年定投复利计算代码逻辑错误排查求助
定投复利代码逻辑错误排查与修正
问题分析
你的代码核心错误在于变量职责混淆+重复计息,导致从第二年开始计算结果偏离预期:
- 变量
eachYearInvest既被用作每年固定投入的金额(12万),又被用来累计总金额,后续循环中错误地将「上年总金额+当年投入」再次复利,而非仅对累计总金额加当年投入后做单次复利计算。 - 以第二年为例,代码先把
(第一年总金额+12万)×1.035设为新的eachYearInvest,再用这个值×1.035得到第二年的“收益”,相当于对当年投入的12万复利了两次,完全违背定投每年固定投入、年末一次复利的逻辑。
正确逻辑梳理
定投复利(年初投入、年末计息)的公式为:第n年总金额 = (第n-1年总金额 + 当年固定投入) × (1+年利率)
对应你的场景:
- 第1年:(0 + 12) × 1.035 = 12.42(符合预期)
- 第2年:(12.42 + 12) × 1.035 ≈ 25.28(符合预期)
- 第3年:(25.28 + 12) × 1.035 ≈ 38.59(符合预期)
修正后的代码
int year = 10; double annualInvest = 12; // 代表12万,与你的初始设定一致 double totalAmount = 0; double rate = 1.035; for (int i = 1; i <= year; i++) { // 年初投入当年资金,年末计算复利 totalAmount = (totalAmount + annualInvest) * rate; System.out.println("at " + i + " year the total revenue are " + String.format("%.2f", totalAmount)); }
代码说明
- 用
totalAmount专门累计每年的总金额,职责单一,避免变量混淆。 - 每年固定投入
annualInvest(12万),对累计金额加当年投入的总和计算复利,完全匹配定投逻辑。 - 通过
String.format("%.2f", totalAmount)输出保留两位小数的结果,和你的预期格式一致。
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

