You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java月度利息计算器复利计算值无法迭代更新问题求解

问题根因

代码无法实现月度复利逐月累算,核心是两处逻辑错误:

  • 循环内每次计算终值时,始终使用初始输入的value作为计息本金,当月结算后的金额没有更新为下一月的计算基数,完全没触发利滚利的迭代逻辑
  • 提前初始化了DecimalFormat格式化对象但从未调用,输出金额会出现多位无效小数;同时初始本金用int整型存储,复利计算过程中产生的小数部分本金会被直接丢弃,导致计算结果偏差。
修复方法

只需调整三处逻辑即可:

  • 将存储本金的变量类型从int改为double,读取初始现值时就用浮点类型接收,避免计算过程丢失精度
  • 每次循环计算完当月终值后,将该终值赋值给本金变量,作为下一月的计息本金,实现迭代累加
  • 输出金额时调用已定义的df实例做格式化,固定保留两位小数,匹配预期输出格式
修复后完整可运行代码
import java.util.Scanner;    
import java.text.DecimalFormat;
public class FutureValues {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println("Enter the present value: ");
    // 本金改为double类型存储,避免丢失小数部分计算精度
    double principal = input.nextDouble();
    System.out.println("Enter annual interest rate: ");
    double rate = input.nextDouble();
    double monthlyRate = rate / 1200;
    System.out.println("Enter the number of months: ");
    int months = input.nextInt();
    
    for (int i = 1; i <= months; i++) {      
        // 计算当月月末终值
        double monthEndValue = principal + (principal * monthlyRate);
        // 格式化后输出,固定保留两位小数
        System.out.println("The future value after " + i + " month is " + df.format(monthEndValue));
        // 核心迭代逻辑:将当月终值设为下月计息本金
        principal = monthEndValue;
    }
    input.close();
  }    
}
效果验证

以你给出的预期结果为例,输入现值1000、年利率5.75%、存期2个月,运行后输出完全匹配预期:

The future value after 1 month is 1004.79
The future value after 2 month is 1009.61

内容的提问来源于stack exchange,提问作者Austin Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:06:39