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

Go语言使用map实现债务分期计算首月还款额为0问题排查

问题根因

代码的核心问题是变量赋值和使用的顺序颠倒了:

  • 你在循环起始就声明了map变量,此时pay还未计算当期值,第一次循环时pay还是int类型的默认零值0
  • 后续你计算出了新的pay值,但并没有更新到已经创建好的map中,打印时取的还是map里存储的旧值,所以首月输出为0,后面的月份输出的都是上一期的还款额。

另外补充一个逻辑隐患:你当前的利息计算是每期都按全额债务计息,如果你实际需要的是按剩余未还本金计息,可以再调整计算规则,当前计息逻辑和你描述的需求一致的话可以保留。

修复后代码

package main

import "fmt"

func main() {

    fmt.Print("Input the debt value : ")
    var debt int
    fmt.Scanln(&debt)

    fmt.Print("Input how long the installments : ")
    var installment int
    fmt.Scanln(&installment)

    fmt.Println("====================================================")
    fmt.Println("Total debt : ", debt)
    fmt.Println("Installments : ", installment)
    fmt.Println("====================================================")
    var firstHalf = installment / 2

    var pay int
    for i := 1; i <= installment; i++ {
        // 先计算当期还款额
        if i <= firstHalf {
            pay = (debt / installment) + (debt * 11 / 100)
        } else {
            pay = (debt / installment) + (debt * 8 / 100)
        }
        // 计算完成后再存入map,满足map使用要求
        value := map[string]int{
            "month":    i,
            "payment": pay,
        }
        // 打印map中的最新值
        if i <= firstHalf {
            fmt.Println(value["month"],"Installment with bank interest (11%) is", value["payment"])
        } else {
            fmt.Println(value["month"],"Installment with bank interest (8%) is", value["payment"])
        }
    }

}

验证结果

输入债务10000000、分期时长7个月时,首月还款额会正常显示为10000000/7 + 10000000*11%的取整结果,不会再出现0值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:30:05